Can Git-svn be used on large, branched repositories?

git, git-svn, svn, tortoisegit

Solution

Thanks for the answers. They did not really help me, though.

This command is the best solution so far:

git svn log --all -1 | \
  sed -n '2s/r\\([0-9]*\\).*/\\1/p' | \
  xargs --replace=from git svn fetch -r from:HEAD

It uses `git svn log --all` to find the highest SVN revision number fetched so far, and fetches everything from that point onwards.

I wish `git svn fetch` would have an option to behave like this. Unless the SVN revisions are changed, there is no reason `git svn` should fetch the same revisions over and over each time.

Problem

I am trying to use Git as a frontend to a SVN repository in order to be able to use Git's nice features like simple branching, stashing etc. The problem is that the SVN repository is quite large (8,000 revs) and contains lots of branches and tags (old as well as new). It's a near standard layout, with a config containing fetch, branches and tags directives. Since the oldest branch and tag refers to revision 10, it means that every `svn fetch` reads the entire repository history from revision 10 and forward, which can takes hours on the slow connection. If I only track trunk, then it's fine, but I still want to make git aware of new branches and tags. I usually look at `git log -1` on the branch I'm at and gets the SVN revision from the comment, so I can do `git svn fetch -r7915:HEAD` or similar. I guess that's what `git svn fetch --parent` does. But why do I need to do this? I'm on Windows, and use TortoiseGit which has quite nice support for `git-svn`, but since TortoiseGit only runs `git svn fetch` I'm kind of stuck. Am I doing something wrong? I expect `svn fetch` to be a fast operation when the first `svn clone -s` is complete.

Original source