如何将一个SVN存储库迁移到另一个SVN存储库?

如何将一个SVN存储库迁移到另一个SVN存储库?,svn,svnadmin,svndump,svndumpfilter,Svn,Svnadmin,Svndump,Svndumpfilter,有没有一种简单的方法可以通过复制所有历史记录将目录从一个存储库复制到另一个存储库?您可以使用svnadmin dump创建转储文件,然后使用svnadmin load导入到新的存储库。最简单的方法是使用: svnadmin dump path/to/repos > repos.out 这将在文件repos.out中为您的存储库(带有历史记录)创建一种可移植格式。然后您可以使用 svnadmin load path/to/newrepos < repos.out svnadmin加

有没有一种简单的方法可以通过复制所有历史记录将目录从一个存储库复制到另一个存储库?

您可以使用
svnadmin dump
创建转储文件,然后使用
svnadmin load
导入到新的存储库。最简单的方法是使用:

svnadmin dump path/to/repos > repos.out
这将在文件
repos.out
中为您的存储库(带有历史记录)创建一种可移植格式。然后您可以使用

svnadmin load path/to/newrepos < repos.out
svnadmin加载路径/to/newrepos
将“转储”存储库加载到新的或现有的存储库

关于从1.7版起使用
svnadmin dump
有以下说明:

Subversion存储库转储格式描述版本化存储库 只有改变。它不会携带任何关于未提交文件的信息 事务、文件系统路径上的用户锁、存储库或服务器 配置定制(包括钩子脚本),等等


如果您不需要历史记录,可以使用
svn export
获得一个没有
.svn
文件夹的干净文件夹,然后将
svn import
导入到其他存储库中

对于历史记录,您需要使用
svnadmin dump
。然后,在使用
svnadmin load
之前,您将使用仅筛选要使用的零件或路径

阅读主题:

如以下建议所示:

举个例子:

svnadmin dump /var/lib/svn/old_repo \
    | svndumpfilter include trunk/my_project/common_dir \
    | svnadmin load /var/lib/svn/new_repo
使用以下命令:

svnsync
是Subversion远程存储库镜像工具。简单地说,它允许您将一个存储库的修订重放到另一个存储库中

svnsync
命令的Subversion文档中有以下警告(从1.7版开始),这意味着一旦使用了其他一些SVN命令来修改镜像存储库,
svnsync
不应再次与该特定镜像一起使用:

svnsync
对镜像存储库中所做的更改非常敏感 这不是镜像操作的一部分。为了防止这种情况 如果
svnsync
进程是唯一的进程,则最好不要发生这种情况 允许修改镜像存储库


要将存储库从一台服务器迁移到另一个版本,请执行以下步骤

步骤1:将所有存储库版本转储到转储文件中。现有存储库中可能有数千个版本。因此,您可以使用以下脚本创建转储文件

dump.sh 这将把使用上述命令必须执行的所有命令写入stdout.sh文件。您可以跟踪此文件以供将来参考

步骤3:检查旧服务器和新服务器之间的端口号22的防火墙是否打开。如果未打开,请询问管理员以使其可用

步骤4:现在使用以下命令将从旧SVN存储库生成的所有转储文件复制到新服务器

$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location
步骤6:现在使用下面的脚本加载所有转储文件

load.sh
#此处“i”是版本起始编号,“j”是现有#存储库的最大版本编号。
j=4999;

为了((i=0;i在Subversion版本1.7中有一个新命令,
svnrdump
,可用于访问远程存储库并生成与
svnadmin dump
命令生成的转储格式相同的输出。这允许您将
svnrdump
svnadmin load
一起使用来传输Subversion存储库

请参见对新命令的解释

$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location
在红皮书的第5章中,该部分有一个子部分使用
svnrdump
进行存储库数据迁移,其中提到:

主要区别[在
svnrdump
svnadmin dump
之间]是 不需要直接访问存储库,
svnrdump
使用完全相同的存储库访问(RA)进行远程操作 Subversion客户端执行的协议。因此,您可能需要 提供身份验证凭据。此外,您的远程交互 [sic]受在上配置的任何授权限制的约束 Subversion服务器


我还假设
svnadmin dump
关于服务器配置定制(如挂钩)的限制可能不会被转移,这也适用于
svnrdump

,我认为应该说明的是,通过使用

    svnadmin dump path/to/repos > dumpfile
可以使用以下命令创建(从svn 1.7及更高版本)

   svnrdump dump url_to_repos > dumpfile

这在从远程计算机而不是服务器上执行时非常有用。

如果这对其他人有帮助,可以使用svn2svn将变更集从一个Subversion存储库重放到另一个:


小心点,我刚刚从中学到,svnadmin dump不包括hook/或conf/以防有人犯了我今天犯的错误,你需要在svn机器上才能做到这一点。你不能签出回购协议,也不能从远程工作副本转储。这是远程位置svnrdump dump和svnrdump的解决方案load将允许您通过网络转储和laod一个存储库。一种安全的合并方法是首先通过tortoise签出并添加并提交一个新文件夹。然后svnadmin load--parent dir newRootFolder$ svnadmin create <new_repository>
# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
   # your-unix-command-here
   echo $i
   svnadmin load –bypass-prop-validation <new_repository> < dump_location /$i.dump
done
    svnadmin dump path/to/repos > dumpfile
   svnrdump dump url_to_repos > dumpfile