Svn 如何导出(然后导入)Subversion存储库?

Svn 如何导出(然后导入)Subversion存储库?,svn,Svn,我正准备完成一个项目,在这个项目中,我使用了一个商业SVN提供商来存储源代码。客户最终选择的web主机包括一个存储库作为托管包的一部分,因此,现在项目已经结束,我想将存储库重新定位到他们的web主机,并停止商业帐户 如何执行此操作?假设您拥有运行svnadmin所需的权限,则需要使用和命令。执行此操作的工具是 svnadmin dump 但要使其工作,您需要文件系统访问存储库。一旦你有了它(并且假设存储库是FSFS格式的),你就可以将存储库复制到它的新位置(如果它是BDB格式的,强烈建议转储/

我正准备完成一个项目,在这个项目中,我使用了一个商业SVN提供商来存储源代码。客户最终选择的web主机包括一个存储库作为托管包的一部分,因此,现在项目已经结束,我想将存储库重新定位到他们的web主机,并停止商业帐户


如何执行此操作?

假设您拥有运行svnadmin所需的权限,则需要使用和命令。

执行此操作的工具是

svnadmin dump
但要使其工作,您需要文件系统访问存储库。一旦你有了它(并且假设存储库是FSFS格式的),你就可以将存储库复制到它的新位置(如果它是BDB格式的,强烈建议转储/加载)


如果您没有文件系统访问权限,则必须要求存储库提供商为您提供转储(并让他们删除存储库,希望他们遵守)

您可能会在中找到一些有关迁移SVN存储库的帮助


这种方法需要访问svnadmin。

如果要移动存储库并保留历史记录,可能需要在两台主机上都访问文件系统。如果您的后端是FSFS(最新版本的默认设置),最简单的解决方案是创建整个存储库文件夹的文件系统副本

如果您有一个Berkley DB后端,如果您不确定您的后端是什么,或者如果您正在更改SVN版本号,那么您将希望使用svnadmin转储旧存储库并将其加载到新存储库中。使用
svnadmin dump
将为您提供单个文件备份,您可以将其复制到新系统。然后,您可以创建新的(空)存储库并使用
svnadmin load
,它将基本上重放所有提交及其元数据(作者、时间戳等)

您可以在此处阅读有关转储/加载过程的更多信息:

另外,如果您执行
svnadmin load
,请确保使用
--force uuid
选项,否则人们将无法切换到新存储库。Subversion使用UUID在内部标识存储库,它不允许您将工作副本切换到其他存储库


如果您没有文件系统访问权限,那么可能还有其他第三方选项(或者您可以编写一些东西)来帮助您迁移:基本上,您必须使用svn日志在新存储库上重播每个版本,然后修复元数据。要做到这一点,您需要准备好revprop更改前和revprop更改后的钩子脚本,这类脚本假定文件系统访问,所以YMMV。或者,如果不想保留历史记录,可以使用工作副本导入新存储库。但希望不是这样。

您也可以使用
svnadmin hotcopy
命令:

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH
它需要从存储库进行完整备份,包括所有挂钩、配置文件等

摘自我的:

现在,您可以导入转储文件,例如,如果您正在机器/subversion版本之间迁移。e、 g.如果我从源存储库创建了一个转储文件,并将其加载到新存储库中,如下所示

用于类Unix系统的命令(从终端):

svnadmin dump/path/to/your/old/repo>backup.dump
svnadmin load/path/to/your/new/repo
用于Microsoft Windows系统的命令(来自cmd shell):

svnadmin dump C:\path\to\your\old\repo>backup.dump
svnadmin加载C:\path\to\your\old\repo
您也可以使用svnsync。这只需要对源存储库进行只读访问


如果您没有对存储库的文件访问权限,我更喜欢(远程Subversion存储库转储)生成转储文件。

rsvndump
对于我将存储库从svnrepository.com迁移到我控制的Ubuntu服务器非常有效

如何在Ubuntu上安装和使用rsvndump:
  • 安装缺少的依赖项(“APR”和Subversion库)

  • 安装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
    
  • 将远程SVN存储库转储到本地文件

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  • 创建新存储库并加载到本地转储文件中

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    
    sudo svnadmin create/opt/subversion/my_new_rep
    sudo svnadmin load——强制uuid/opt/subversion/my\u new\u repo

  • 我发现了一篇关于如何将svn存储库从一个托管服务移动到另一个托管服务以及如何进行本地备份的文章:

  • 定义存储库的存储位置:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  • 现在使用
    svnadmin create$MYREPO
  • 创建钩子文件并使其可执行:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  • 现在,我们可以开始使用
    svnsync
    导入存储库,这将初始化目标存储库以从另一个存储库进行同步:

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  • 以及将所有待定修订从初始化源转移到目标的最后一步:

    svnsync sync file://$MYREPO
    
  • 现在您在
    ~/repo
    目录中有一个本地svn存储库

    资料来源:


    基本上,有很多方法可以完成这项任务。本书对该主题有深入的介绍,因此我建议阅读本书的章节

    以下是您的选项的简要说明:

    • 这取决于您的环境,但很有可能您只需将存储库复制到新服务器,它就可以工作了。复制repo后,您必须修改存储库钩子脚本,以确保它们按预期工作

    • 您可以使用和命令来生成完整转储,然后将其加载到另一台服务器上的另一个存储库。您将需要一个新的清理存储库来将转储加载到其中。请记住,该方法只处理存储库历史记录,不会移动钩子脚本和存储库配置文件
      echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
      chmod +x $MYREPO/hooks/pre-revprop-change
      
      svnsync init file://$MYREPO http://your.svn.repo.here/
      
      svnsync sync file://$MYREPO