Cloning a Non-Standard Svn Repository with Git-Svn Cloning a Non-Standard Svn Repository with Git-Svn git git

Cloning a Non-Standard Svn Repository with Git-Svn


Lee B was right. The answer, provided by doener in #git, is to upgrade Git to 1.6.x (I had been using 1.5.x). 1.6.x offers deep cloning so that multiple wildcards can be used with the --branches option:

$ git svn clone https://svn.myrepos.com/myproject web-self-serve \           --trunk=trunk --branches=branches/*/* --prefix=svn/$ git branch -r  svn/development/sandbox1  svn/development/feature1  svn/development/sandbox2  svn/development/sandbox3  svn/development/model-associations  svn/maintenance/version1.0.0  svn/trunk

Exactly what I needed. Thanks for the insight, all.


Could you try nirvdrum's svn2git (seems the most up-to-date) in order to import your svn into a git repository ?
(Early 2009, Paul mentioned this iteman's svn2git in replacement of this original jcoglan's svn2git, which was, as his author mentioned: "a quick hack to get my code outof Subversion")

It is better than git svn clone because if you have this code in svn:

  trunk    ...  branches    1.x    2.x  tags    1.0.0    1.0.1    1.0.2    1.1.0    2.0.0

git-svn will go through the commit history to build a new git repo.
It will import all branches and tags as remote svn branches, whereas what you really want is git-native local branches and git tag objects.
So after importing this project, you would get:

  $ git branch  * master  $ git branch -a  * master    1.x    2.x    tags/1.0.0    tags/1.0.1    tags/1.0.2    tags/1.1.0    tags/2.0.0    trunk  $ git tag -l  [ empty ]

After svn2git is done with your project, you'll get this instead:

  $ git branch  * master    1.x    2.x  $ git tag -l    1.0.0    1.0.1    1.0.2    1.1.0    2.0.0

Of course, this solution is not meant as a one-way trip.

You can always go back to your svn repository, with... git2svn (also present there)

The idea remain:

  • SVN at work as a central repository.

  • Git "elsewhere" to quickly experiment amongst multiple Git-private branches.

  • import back only consolidated Git branches into official SVN branches.


For repo layouts not served by plain wildcards: (from my answer to this related question)

The current git-svn manpage says:

It is also possible to fetch a subset of branches or tags by using a comma-separated list of names within braces. For example:

[svn-remote "huge-project"]     url = http://server.org/svn     fetch = trunk/src:refs/remotes/trunk     branches = branches/{red,green}/src:refs/remotes/branches/*     tags = tags/{1.0,2.0}/src:refs/remotes/tags/*