Recently SourceForge’s service has declined to a point where it gets really annoying. Basically every time I tried to commit a change to the svn repository of one of my projects, I run into timeouts and other errors. I want to spend my time working on my projects, not convincing their infrastructure to accept my changes.
So I went looking for alternatives and discovered that basically every hosting service nowadays supports git, some add Mercurial and only very few also offer Subversion. Some claim to offer Subversion access to git repositories but whenever I actually tried that, it turned out that it either didn’t work at all or had limitations. Usually the limitation was that svn:external tags were not supported.
OK, this blog post was supposed to be about getting a dump of a remote svn repository, not about hosting services and their limitations…
The usual advice you find, when you google for “svn dump repository” is to use svnadmin. Unfortunately it turns out that svnadmin only works for local repositories so it is not suitable for dumping a repository on SourceForge. There are a few tools that claim to sync repositories but none of them worked for me. Eventually I found a reference to svnrdump, which is included in TortoisSVN and is exactly what I was looking for:
svnrdump dump http://svn.code.sf.net/p/dzlib/code > dzlib.svndump
creates a dump of the repository in the same format as svnadmin does. In theory it can also load that dump into a remote repository, but that requires the target repository to be prepared for that operation.
Unfortunately, even that operation timed out just now why trying to download revision 162 (of 744), so I’m back to square one.
Edit: I eventually succeeded with the above command. But, as Ondrej Kelle pointed out in his comment on my Google+ post, for SourceForge there is a simpler and more robust way: Create a local copy of the repository.
rsync -a -v svn.code.sf.net::p/dzlib/code/ .
It’s even documented in the SourceForge support documentation (I only found it after I knew of this option). It requires the rsync tool, which is not available under Windows by default, but hey, are there any developers who don’t have access to a Linux computer or VM?
Once you have got that local copy, you can simply use svnadmin to create a dump from it:
svnadmin --incremental --deltas path\to\repository > repository.dump
I added the options –incremental and –deltas after initially loading the dump into a fresh repository failed when it encountered the first binary file. With these options, the problem did not occur.
type repository.dump | svnadmin load path\to\new\repository