tags:

views:

60

answers:

1

I have checked out a svn repository using git svn. Now I need to checkout one of the branches and track it. Which is the best way to do it?

+4  A: 

Standard Subversion layout

Create a git clone of that includes your Subversion trunk, tags, and branches with

git svn clone http://svn.example.com/project -T trunk -b branches -t tags

The --stdlayout option is a nice shortcut if your Subversion repository uses the typical structure:

git svn clone http://svn.example.com/project --stdlayout

Make your git repository ignore everything the Subversion one is:

git svn show-ignore >> .git/info/exclude

You should now be able to see all the Subversion branches on the git side:

git branch -r

Say the name of the branch in Subversion is waldo. On the git side, you'd run

git checkout -b waldo-svn remotes/waldo

The -svn suffix is to avoid warnings of the form

warning: refname 'waldo' is ambiguous.

To update the git branch waldo-svn, run

git checkout waldo-svn
git svn rebase

Starting from a trunk-only checkout

To add a Subversion branch to a trunk-only clone, modify your git repository's .git/config to contain

[svn-remote "svn-mybranch"]
        url = http://svn.example.com/project/branches/mybranch
        fetch = :refs/remotes/mybranch

You'll need to develop the habit of running

git svn fetch --fetch-all

to update all of what git svn thinks are separate remotes. At this point, you can create and track branches as above. For example, to create a git branch that corresponds to mybranch, run

git checkout -b mybranch-svn remotes/mybranch

For the branches from which you intend to git svn dcommit, keep their histories linear!


Further information

You may also be interested in reading an answer to a related question.

Greg Bacon
This doesn't work for me, as I have checked out the trunk using git svn clone.. I didn't set branches to be checked out... I think I need to to that firstly.
markovuksanovic
@markovuksanovic See updated answer.
Greg Bacon
The fact is that I used git svn clone http://svn.example.com/project/trunkAnd now I don't know how to set other branches to be tracked without loosing my current repo...
markovuksanovic
@markovuksanovic See newly updated answer!
Greg Bacon