We had an old svnserve instance with repositories that had mostly been abandoned since we switched to git. In preperation to shut things down, I wanted to backup those repositories locally in a way that would allow us to restore them in the rare instance it was needed. Here's a recipe that uses a combination of bash, svnsync and svnadmin to dump all revisions of each remote repository into svndump files on your local machine.
Save the following script as
echo "Backing up repo: $1"
svnadmin create $1
echo "#!/bin/sh\nexit 0" >> `pwd`/$1/hooks/pre-revprop-change
chmod +x `pwd`/$1/hooks/pre-revprop-change
svnsync init file://`pwd`/$1 svn://SOURCEURL/$1 --source-username=USERNAME --source-password=PASSWORD
svnsync sync file://`pwd`/$1 --source-username=USERNAME --source-password=PASSWORD
svnadmin dump $1 > $1.svndump
echo "Cleaning up ($1)..."
rm -rf ./$1
Make it executable:
$ chmod +x svnbackup.sh
You should now be able to run it on one repository by passing the repository name as the first argument:
$ svnbackup.sh repo1
Setup a list of repositories to download in a file named
svnrepos.txt, one repository per line:
xargs to iterate over each repository in the fail, passing it into the backup script:
$ xargs -n1 < svnrepos.txt ./svnbackup.sh
The result will be one
<reponame>.svndump file for each repository in the list containing all revisions for that repository.