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

ted*_*ted 9 svn svnsync svndumpfilter svnadmin svndump

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

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

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

  1. svnadmin dump + filter + import:由于存储库大小而不是选项
  2. svnsync:我们已经在第二个存储库中有数据了(存储库已经很大了,我认为合并它们不是一个好主意,除了decidng不是我的工作),而且从我收集到的这需要第二个存储库是空.
  3. 第三方解决方案:反复崩溃,因为它无法删除文件,因为"另一个进程打开了文件"(尽管我可以通过操作系统删除文件,但它是由脚本创建的)

是否有其他解决方案,方法,或者我错过了其中一个解决方案?

mad*_*xej 8

svnadmin转储+过滤器+导入甚至可以用于大型存储库.

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

使用--incremental标志来svndump.

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

如果您的起始修订版是10000并且您的结束修订版是20000并且您要复制的路径是项目/源,则该命令应该看起来像

svnadmin dump --incremental -r10000:20000 YourRepoPath | svndumpfilter include projects/source --drop-empty-revs --renumber-revs > source.dump
Run Code Online (Sandbox Code Playgroud)

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