Selective import of SVN branches into a git/git-svn repository

Use Case

You are using Git and git-svn on a big project which has lots of branches and tags but you only need to work with a small selection of those and you don’t want to import all of the rest.

Import an individual SVN branch

1) Define the new branch in .git/config :

[svn-remote "release-branch"]
        url = svn+ssh://xxxx@mono-cvs.ximian.com/source/branches/mono-2-2/mcs
        fetch = :refs/remotes/git-svn-release-branch

2) Import the SVN branch. SVN_BRANCHED_REVISION is the the revision when the branch happened in SVN.

[~]$ git svn fetch release-branch -r SVN_BRANCHED_REVISION

3) Hook up a local Git branch to the remote branch:

[~]$ git branch --track release git-svn-release-branch

5) Checkout and update

[~]$ git checkout release
[~]$ git svn rebase

Done!

Delete the branch checkout

The following command sequence will delete (locally only) the SVN branch and its history:

[~]$ git branch -D release
[~]$ git branch -D -r git-svn-release-branch
[~]$ rm -rf .git/svn/git-svn-release-branch
[~]$ git gc

Now what?

Well, for starters given that you are ready to commit something to trunk and you also want to “backport” to the release branch you just have to do:

[~]$ git svn dcommit
[~]$ git checkout release && git svn rebase
[~]$ git cherry-pick master && git svn dcommit
[~]$ git checkout master
  • Twitter
  • Facebook
  • FriendFeed
  • StumbleUpon
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Reddit
  • Tumblr
  • PDF
  • Print
  • email
Rating: (No Ratings Yet)
Loading ... Loading ...
View Comments
Published: Jan 15th, 2009 (Views: 988)
Categories: Coding
Tags: , ,
  • Dan
    This is amazing! Thanks for posting this, it's resolved what I've spent hours trying to figure out how to do.

    Dan.
  • i have been searching for this answer for quite some time and even asked on stackoverflow. thank you. i only wish they would add something to do this manually to git-svn.
blog comments powered by Disqus