How do I export (and then import) a Subversion repository?

后端 未结 11 1299
一向
一向 2020-12-02 05:47

I\'m just about wrapped up on a project where I was using a commercial SVN provider to store the source code. The web host the customer ultimately picked includes a reposito

相关标签:
11条回答
  • 2020-12-02 06:15

    If you want to move the repository and keep history, you'll probably need filesystem access on both hosts. The simplest solution, if your backend is FSFS (the default on recent versions), is to make a filesystem copy of the entire repository folder.

    If you have a Berkley DB backend, if you're not sure of what your backend is, or if you're changing SVN version numbers, you're going to want to use svnadmin to dump your old repository and load it into your new repository. Using svnadmin dump will give you a single file backup that you can copy to the new system. Then you can create the new (empty) repository and use svnadmin load, which will essentially replay all the commits along with its metadata (author, timestamp, etc).

    You can read more about the dump/load process here:

    http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

    Also, if you do svnadmin load, make sure you use the --force-uuid option, or otherwise people are going to have problems switching to the new repository. Subversion uses a UUID to identify the repository internally, and it won't let you switch a working copy to a different repository.

    If you don't have filesystem access, there may be other third party options out there (or you can write something) to help you migrate: essentially you'd have to use the svn log to replay each revision on the new repository, and then fix up the metadata afterwards. You'll need the pre-revprop-change and post-revprop-change hook scripts in place to do this, which sort of assumes filesystem access, so YMMV. Or, if you don't want to keep the history, you can use your working copy to import into the new repository. But hopefully this isn't the case.

    0 讨论(0)
  • 2020-12-02 06:17

    Excerpt from my Blog-Note-to-myself:

    Now you can import a dump file e.g. if you are migrating between machines / subversion versions. e.g. if I had created a dump file from the source repository and load it into the new repository as shown below.

    Commands for Unix-like systems (from terminal):

    svnadmin dump /path/to/your/old/repo > backup.dump
    svnadmin load /path/to/your/new/repo < backup.dump.dmp
    

    Commands for Microsoft Windows systems (from cmd shell):

    svnadmin dump C:\path\to\your\old\repo > backup.dump
    svnadmin load C:\path\to\your\old\repo < backup.dump
    
    0 讨论(0)
  • 2020-12-02 06:22

    Assuming you have the necessary privileges to run svnadmin, you need to use the dump and load commands.

    0 讨论(0)
  • 2020-12-02 06:23

    rsvndump worked great for me migrating a repository from svnrepository.com to an Ubuntu server that I control.

    How to install and use rsvndump on Ubuntu:

    1. Install missing dependencies ("APR" and Subversion libraries)

      sudo apt-get install apache2-threaded-dev
      sudo apt-get install libsvn-dev
      
    2. Install rsvndump

      wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
      tar xvfz rsvndump-0.5.5.tar.gz
      cd rsvndump-0.5.5
      ./configure
      make
      sudo make install
      
    3. Dump the remote SVN repository to a local file

      rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
      
    4. Create a new repository and load in the local dump file

      sudo svnadmin create /opt/subversion/my_new_rep
      sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
      
    0 讨论(0)
  • 2020-12-02 06:24

    I found an article about how to move svn repositories from a hosting service to another, and how to do local backups:

    1. Define where you will store your repositories:

      mkdir ~/repo
      MYREPO=/home/me/someplace ## you should use full path here
      
    2. Now create a empty svn repository with svnadmin create $MYREPO
    3. Create a hook file and make it executable:

      echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
      chmod +x $MYREPO/hooks/pre-revprop-change
      
    4. Now we can start importing the repository with svnsync, that will initialize a destination repository for synchronization from another repository:

      svnsync init file://$MYREPO http://your.svn.repo.here/
      
    5. And the finishing touch to transfer all pending revisions to the destination from the source with which it was initialized:

      svnsync sync file://$MYREPO
      

    There now you have a local svn repository in the ~/repo directory.

    Source:

    • http://kylecordes.com/2007/svnsync-svn-backup
    • http://www.workhabit.com/blog/moving-svn-repository-hosted-service
    0 讨论(0)
  • 2020-12-02 06:26

    You can also use svnsync. This only requires read-only access on the source repository

    more at svnbook

    0 讨论(0)
提交回复
热议问题