Moving a Subversion Repository
At some point in a developers life, we have to upgrade, switch hosting providers or replace broken hardware and with that comes the inevitable. Moving all of our apps, data and configuration settings, and eventually our holy repository. And with that comes also the task of moving a subversion repository.
Moving an SVN repository from one Subversion server to another, while carrying over the entire version history information may seem like a daunting task, but fortunately it’s rather quite easy and straight forward.
Backup your old Repository
Step one is the generate a dump file of the existing repository which we can later move to our new server.
We create this dump with the following command:
# svnadmin dump /path/to/old/repository > repository.svn_dump
This dump file contains now all the revisions that have ever been made and committed to our SVN repository, and therefore this file may get rather large, depending on how active and old the repository is.
Create the new Repository and move the dump file
Now let’s create a new repository on our new server:
# svnadmin create /path/to/new/repository
then we simply transfer the dump file to our new subversion server.
Import the dump file
And finally import our dump file with the force-uuid flag:
# svnadmin load --force-uuid /path/to/new/repository < repository.svn_dump
The force-uuid flag retains the UUID and keeps the repo’s integrity in check. And that concludes the basic steps of moving a subversion repository.
Note
You also have the option to import a partial dump, by creating an incremental dump starting at a revision number of your choice, like such:
# svnadmin dump --incremental -r 456789 /path/to/old/repository > repository_r456789.svn_dump
and then import it on your target server:
# svnadmin load /path/to/new/repository < repository_r456789.svn_dump
SVN dumps should also be part of your repository backup strategy. Keep them on a separate server so they’re ready for restoration should your Subversion server take a dive, and they work nicely across different versions of subversion.