Subversion dumps
This week, we just had it. The current provider we pay to host our subversion repositories is just unbearable, and so we decided to move (on) to [Unfuddle][3]. Our reason to move to Unfuddle is that they offer everything we need (and more, e.g. Git), at a pretty good price. I also heard Unfuddle a 100 times when I shopped for a recommendation.
And on top of all the features, they also kick butt at support and for example offered to import our repositories right away. But, has anyone of you tried to dump a subversion repository, ever?
Creating a dump
Being a good user, I rtfm'd first. The manual states to use svnadmin dump
. And apparently it's that easy?
Not really.
First off, the manual tells me to: svnadmin /path/to/repo
. That didn't work at all though. Instead I had to svnadmin dump /path/to/repo/.svn
. But that didn't work regardless.
After rtfm, there's stfw, and I did that too when I encountered the following issues:
server# svnadmin ./path/to/repo/.svn
svnadmin: Expected repository format '3' or '5'; found format '8'
... then I updated my local subversion client, checked out a new copy of the repository, and got this:
server# svnadmin ./path/to/repo/.svn
svnadmin: Can't open file './path/to/repo/.svn/format', no such file or directory
There really is no format
file when I check out the same repository with Subversion 1.6.3
.
Ahhhh!!!111 Madness!
Apparently a more recent version of Subversion cannot deal older repositories?
Updated, 2009-07-23: Apparently it helps to be awake while doing this. The solution to the problem above is rather simple. svnadmin
does not work on a checkout, but only on the real repository. So in case you are hosting with an external provider such as Unfuddle, Hosted Projects, CVSDude, Assembla and so on, you won't be able to svnadmin dump
on a working copy.
svnadmin & svnsync
Since the current provider charges extra for a backup and the apparently figured out we are trying to save ourselves, I stfw
(again) and came up with these instructions (source) on how to create a local copy of the repository. They assume your username is svnsync
, so in case that's not it, you'll need to adjust it.
svnadmin create repo-local
copy the following script in
repo-local/hooks/pre-revprop-change
:#!/bin/sh USER="$3"
if [ "$USER" = "svnsync" ]; then exit 0; fi
echo "Only the svnsync user can change revprops" >&2 exit 1
Run the following command to initialize the sync:
svnsync init --username svnsync file://`pwd`/repo-local http://svn.example.org/repo-online
Run this to create the local copy:
svnsync sync file://`pwd`/repo-local
Local copy, ftw! Now, proceed on to svnadmin dump ./complete/path/to/repo-local > repo.dmp
.
rsvndump [still] to the rescue
Updated, 2009-07-29: Regardless of the above, rsvndump
is still the easiest way to backup a remote repository.
rsvndump is pretty nifty, you can get it from the SourceForge page, but it's also available in FreeBSD's ports (Woohoo!), and it works like a charm:
server# rsvndump -u user -p password http://url.to.your/repo > dump
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
* Dumped revision 4.
...
I know, I know. Not a super-duper post on the usual topics but I thought I'd share it anyway. I'm very much hoping that Google picks it up to save someone else' sanity.
Trackbacks
The author does not allow comments to this entry
Comments