有没有简单的方法将一个目录从一个仓库复制到另一个仓库,并复制所有历史记录?
有没有简单的方法将一个目录从一个仓库复制到另一个仓库,并复制所有历史记录?
svnadmin dump path/to/repos > repos.out
这将在文件repos.out
中为您的存储库(包括历史记录)创建一个可移植格式。然后,您可以使用
svnadmin load path/to/newrepos < repos.out
要将您“dumped”(转储)的代码库加载到新代码库或现有代码库中,可以使用第5章。仓库维护->迁移存储库数据 中关于版本1.7中使用svnadmin dump
的注意事项:
Subversion仓库转储格式仅描述具有版本号的仓库更改。它不会携带任何有关未提交的事务、用户锁定文件系统路径、仓库或服务器配置自定义(包括钩子脚本)等信息。
如Subversion book所建议:
svnadmin dump path/to/repos_src \
| svndumpfilter include path/inside/svn/to/directory \
| svnadmin load path/to/repos_dst
带有示例:
svnadmin dump /var/lib/svn/old_repo \
| svndumpfilter include trunk/my_project/common_dir \
| svnadmin load /var/lib/svn/new_repo
如果您不需要历史记录,您可以使用svn export
命令获取一个干净的文件夹,其中不包含.svn
文件夹,然后将其导入到其他存储库中,使用svn import
命令。
如果需要保留历史记录,则需要使用svnadmin dump
命令进行备份。之后,您需要使用svndumpfilter
来筛选出您想要使用的部分或路径,最后再使用svnadmin load
命令进行导入。
相关主题:
svnsync
— Subversion Repository Mirroring 命令:
Subversion 的
svnsync
是 Subversion 远程库镜像工具。简单来说,它允许您将一个仓库的修订记录重放到另一个仓库中。
svnsync
命令文档(截至版本 1.7)发出了以下警告,暗示一旦使用其他 SVN 命令修改了镜像仓库,则不应再次使用该特定镜像的 svnsync
:
svnsync
非常敏感,会对在其它过程中对镜像仓库所做的更改作出反应。为防止这种情况发生,最好只允许svnsync
进程修改镜像仓库。
svnrdump
,可以用于访问远程存储库,并生成与svnadmin dump
命令生成的相同转储格式输出。这使您可以使用svnrdump
和svnadmin load
来传输Subversion存储库。svnrdump
进行存储库数据迁移提到:
我还假设[
svnrdump
和svnadmin dump
]的主要区别在于,svnrdump
不需要直接访问存储库,而是远程操作,使用与Subversion客户端相同的存储库访问(RA)协议。因此,您可能需要提供身份验证凭据。此外,您的远程交互受制于配置在Subversion服务器上的任何授权限制。
svnadmin dump
的限制,例如挂钩之类的服务器配置自定义可能不适用于svnrdump
。svnadmin dump
创建转储文件,然后使用svnadmin load
导入到新存储库中。我认为需要说明的是,利用工具创建的转储文件
svnadmin dump path/to/repos > dumpfile
svnrdump dump url_to_repos > dumpfile
当需要在远程计算机上执行操作而不是在服务器上执行时,这将非常有用。
将存储库从一个服务器迁移到另一个版本,您需要遵循以下步骤。
第一步:将所有存储库版本转储到转储文件中。您可能在现有存储库中拥有数千个版本。因此,您可以使用以下脚本创建转储文件。
# 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 dump <old_server_repository_location > -r $i –incremental > <dump_location>/$i.dump
done
$ bash dump.sh > stdout.sh
$ ./sh dump.sh > stdout.sh
这将把您必须使用上述命令执行的所有命令写入 stdout.sh 文件。 您可以跟踪此文件以供将来参考。
步骤3:检查旧服务器和新服务器之间的端口号22是否开放防火墙。如果没有开放,请请求管理员提供权限。
步骤4:现在使用以下命令将从旧 SVN 存储库生成的所有转储文件复制到新服务器。
$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location
xxxx
是执行操作的用户。在进行sftp时,您正在将转储文件从旧服务器复制到新服务器。$ 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