SVN在两个存储库之间移动具有历史记录的代码

时间:2012-10-22 11:27:24

标签: svn svnadmin svnsync svndump svndumpfilter

我必须处理两个存储库,并希望在保留修订历史的同时在两个存储库之间移动一个带有代码的目录。

我在这里读了几个关于SO的问题,但我仍然不确定要走哪条路。我们的存储库巨大(文件(orkingcopy)不包括修订版>几GB),因为所有内容都已签入(代码+设计+ ...)。

到目前为止我看到的解决方案是:

  1. svnadmin dump + filter + import:由于存储库大小而不是选项
  2. svnsync:我们已经在第二个存储库中有数据(存储库已经很大了,我认为合并它们不是一个好主意,除了decidng不是我的工作),并且来自我收集的内容要求第二个存储库为空。
  3. Third Party Solution :反复崩溃,因为它无法删除文件,因为“另一个进程打开了文件”(尽管我可以通过操作系统删除文件,但它会被创建通过脚本)
  4. 是否有其他解决方案,方法,或者我错过了其中一个解决方案?

1 个答案:

答案 0 :(得分:8)

svnadmin dump + filter + import即使对于大型存储库也能正常工作。

您需要为性能做些事情。 找出哪个版本是首次创建要复制的文件夹的版本。然后检查日志以查找修改该文件夹中任何内容的最新修订。您只需要转储该范围内的修订版。

对svndump使用--incremental标志。

不要尝试在SVN Dump中使用Deltas标志。 SvnDumpFilter不适用于使用“deltas”创建的转储。 不要尝试将巨大的转储保存到文件中,并在文件上运行SvnDumpFilter。而是用管道一步完成。

如果你的起始修订版是10000而你的最终版本是20000并且你要复制的路径是项目/源,那么命令应该是

svnadmin dump --incremental -r10000:20000 YourRepoPath | svndumpfilter include projects/source --drop-empty-revs --renumber-revs > source.dump

后跟svnadmin load命令将转储加载到您的其他仓库中。