Take the 2-minute tour ×

I often have the case that I want to work on a SVN repository right away. But an ordinary git svn clone [url] also clones the entire history. So I want to speed things up. The first part is to fetch only the last revision into your Git repository. I do it like so:

REV=`svn info $URL |grep Revision: | awk '{print $2}'`

git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER

(more info in the StackOverflow article: "How to git-svn clone last n revisions from svn"

This way I'm up and running and can work immediately. But without local copy of the history.

The question is, how do I afterwards fetch history from the svn repository?

And preferably, can this be done in chunks of, say 1000 revisions (in reverse order). Any help here would be greatly appreciated :)

share|improve this question

3 Answers 3

up vote 17 down vote accepted

I found out how it can be done. The trick is not to use git svn clone. Instead, use git svn init and git svn fetch individually. Modified the example:


cd !$ #goes into dir named $PROJECT_FOLDER
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches
git svn fetch -r $REV

# hack, hack, hack

# or update history (fetch 50 revisions back each loop
for (( r=$REV; r>0; r-=50 )); 
  git svn fetch -r $r:HEAD
share|improve this answer
this doesn't seem to work for me, it just returns when I try to do git svn fetch -r 1000:HEAD –  Verhogen Oct 25 '09 at 23:10
It does not for me either, as well as solution proposed by Rob Crawford below. For me, initial question remains unanswered. –  sthiers Sep 11 '12 at 12:42
@verhogen - git svn fetch -r 1000:HEAD means "fetch all revisions starting at rev 1000 up to the current HEAD". If you have, say, 800 revisions in your SVN, this won't fetch anything. If you had 50k revisions, it would fetch way more than you intended. –  Hanno Fietz Dec 10 '13 at 9:15

None of the suggested answers will work. git svn fetch with a revision will only retrieve newer revisions than what is already cloned. You may be able to use git svn reset to go back to an older revision and retrieve from there, but you'll have to do some dirty work afterwards to 'graft' your newer revisions back onto the full tree (the SHA1 of an SVN revision in git depends on the entire parentage of the revision). If you're handy with the scalpels git offers you, go for it.

It's much easier to just avoid the issue.

  • Do an initial clone of the last few revisions, so you can get working immediately;
  • Start another clone of the full history into another directory/git repository;
  • Work in your partial history as much as you want;
  • When the full clone completes, use an approach like http://www.sanityinc.com/articles/relocating-git-svn-repositories/ to copy your work from the partial repository to the full one.

So, that's a partial answer - how can you afterwards fetch history? Fetch it into another repo and copy what you need over. Can it be done in chunks of 1000 in reverse order? With the scalpels, and a lot of patience, it could, but it's unlikely worth it. The full fetch running forward is going to outrun the overhead of all those first revisions grabbed by each block you git svn fetch, and the fixup will get tedious.

share|improve this answer

git svn fetch appears to "remember" the revisions it's seen previously. I've been having success with doing ranges:

git svn fetch -r 0:100
git svn fetch -r 100:200
git svn fetch -r 4500
git svn rebase
git svn fetch -r 200:300

I fetched the most recent revisions and then started "filling in" the gaps. It seems to work fine.

Jesper -- if your repository doesn't have a revision 1000, then there's nothing for it to fetch. Make sure the revision numbers you're using are valid!

share|improve this answer
not sure what this accomplishes. it succeeds, but a git log won't show you anything more than your initial fetch and forward. –  Chris DaMour Dec 6 '12 at 22:20

Your Answer


