10

我必须在两个存储库上工作,并且希望在两个存储库之间移动一个包含代码的目录,同时保留修订历史。

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

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

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

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

4

1 回答 1

9

svnadmin 转储 + 过滤器 + 导入甚至适用于大型存储库。

为了提高性能,您需要做一些事情。找出第一个创建要复制的文件夹的版本。然后检查日志以找到修改该文件夹中任何内容的最后一个修订。您只需要转储该范围内的修订。

使用 --incremental 标志来 svndump。

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

如果您的起始修订版是 10000 并且您的最终修订版是 20000 并且您要复制的路径是项目/源,则该命令应如下所示

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

随后是 svnadmin load 命令将转储加载到您的其他存储库中。

于 2012-10-22T15:05:58.463 回答