HowTo:Checkout GIT

From VsWiki
Jump to: navigation, search

This page describes how to use GIT with the Vega Strike SVN repository.

GIT is a distributed sourcecode revision control system, which allows you to commit changes to a local repository and from there commit the changes to the remove Vega Strike SVN repository. This is useful if you want to experiment with the codebase, or if you do not have commit privileges to the Vega Strike SVN repository.

If you are unfamiliar with GIT, the you should start by reading the GIT SVN Crash Course.

Installation

First you need to install the GIT and GIT-SVN packages. How you do this, depends on your system.

See the chapter 2 in the GIT Book.

Set up

After installing the two packages above, you have to set up a local git repository for the Vega Strike codebase.

Normally git-svn will copy the full svn repository, that is all revisions of all files. This takes takes a long time, and as you seldom need the full history, you can instead copy from a given revision onwards.

This command will only copy the most recent revision. If you want the full history, remove the "-rHEAD" option:

git svn clone -rHEAD https://svn.code.sf.net/p/vegastrike/code/trunk/vegastrike/

Next you need to handle svn:externals. You can find them with "git svn show-externals". There may be a better way using git submodules, but this works.

git svn clone -rHEAD http://svn.boost.org/svn/boost/tags/release/Boost_1_53_0/boost/ boost/1_53/boost
git svn clone -rHEAD http://svn.boost.org/svn/boost/tags/release/Boost_1_53_0/libs/python/src/ boost/1_53/src

For older versions of Boost:

git svn clone -rHEAD http://svn.boost.org/svn/boost/tags/release/Boost_1_35_0/boost/ boost/1_35/boost
git svn clone -rHEAD http://svn.boost.org/svn/boost/tags/release/Boost_1_35_0/libs/python/src/ boost/1_35/src
git svn clone -rHEAD http://svn.boost.org/svn/boost/tags/release/Boost_1_45_0/boost/ boost/1_45/boost
git svn clone -rHEAD http://svn.boost.org/svn/boost/tags/release/Boost_1_45_0/libs/python/src/ boost/1_45/src

We recommend that you add the following lines to your .gitignore file, which should be created in the same directory as the .git directory is located.

boost/1_53
boost/1_45
boost/1_35
boost_patched_gcc44

You may also want to add auto-generated files to .gitignore.

Now you are almost ready to work on the codebase. You just need to create a branch to work on. This will make it easier to keep your local GIT repository synchronized with the remote SVN repository.

git branch insert-your-branch-name
git checkout insert-your-branch-name

Replace insert-your-branch-name with the name that you want to call your branch.

From here on, you can follow the normal build instructions.

Synchronize with SVN

If others commit changes to the remote SVN repository, you can update your local GIT repository as follows.

Make sure that you have committed all your changes to the local GIT repository before you start synchronizing.

First you need to update the trunk of your local GIT repository with the changes from the remote SVN repository.

git checkout master
git svn rebase

Next you can synchronize your branch with the trunk.

git checkout insert-your-branch-name
git pull . master

Submit your changes

The "git commit" operation only commits your changes to your local GIT repository. When you want to submit your changes to the remote SVN repository, then you have two options. If you have commit privileges to the Vega Strike SVN repository, then you can use the "git svn dcommit" command. Otherwise you have to submit a patch to the Vega Strike forums.

You can either use

git diff --no-prefix master..insert-your-branch-name > mypatch.diff

Better yet, you can use the following bash script, which will make sure that the output looks like an SVN patch.

#!/bin/sh
#
# git-svn-diff
# Generate an SVN-compatible diff against the tip of the tracking branch
TRACKING_BRANCH=`git config --get svn-remote.svn.fetch | sed -e 's/.*:refs\/remotes\///'`
REV=`git svn find-rev $(git rev-list --date-order --max-count=1 $TRACKING_BRANCH)`
git diff --no-prefix $(git rev-list --date-order --max-count=1 $TRACKING_BRANCH) $* |
sed -e "s/^+++ .*/&    (working copy)/" -e "s/^--- .*/&    (revision $REV)/" \
-e "s/^diff --git [^[:space:]]*/Index:/" \
-e "s/^index.*/===================================================================/"

For a more complete script see git-svn-diff.sh.