Skip to content

Instantly share code, notes, and snippets.

@costis
Created June 11, 2014 11:58
Show Gist options
  • Save costis/f5ca91867b93d6fb80a9 to your computer and use it in GitHub Desktop.
Save costis/f5ca91867b93d6fb80a9 to your computer and use it in GitHub Desktop.
Git and SVN, Subversion

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 repo does:

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment