2012-10-22 67 views
7

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

我在这里读了几个关于SO的问题,但我还不确定要走哪条路。我们的仓库是巨大(文件(orkingcopy)不包括修订>几GB),因为一切都在(代码+ designdata + ...)。

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

  1. svnadmin的转储+过滤+进口:不是一种选择,由于库的大小
  2. svnsync的:我们已经在第二库数据(仓库已经很大,我不认为将它们合并是一个好主意,除了不是我的工作的decidng),并且从我收集的这个需要第二个仓库是空的。
  3. Third Party Solution:反复崩溃,因为它不能删除文件,因为“文件打开另一个进程事呢”(enevthough我可以删除通过OS的文件,它就会通过脚本创建)

有没有其他的解决方案,对此的方法,还是我错过了解决方案之一?

+1

为什么第一个选项是问题?您可以通过过滤器传递转储而不保存到文件。 –

+0

@DmitryPavlenko:考虑到版本库大约20Gb检出并且版本号目前是6位数(112 xxx),转储必须大得多。转储完整的存储库以移动一个大小为几兆的代码目录似乎过度。这给系统带来了很多不必要的压力(查看每个版本/转储=>“复制”200G或更多(必须检查repro大小)=>在200G数据上运行过滤器。如果你认为这会 – ted

+0

@DmitryPavlenko:简而言之,我不确定自己拥有200G(不是管理员只是一个用户),网络的影响和开销。现在考虑我想在这个数据移动时继续工作,但是如果在同时有版本库访问的情况下,svn dump会做什么? – ted

回答

7

svnadmin dump + filter + import即使在大型软件仓库中也能正常工作。

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

将--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 

后跟用svnadmin load命令加载转储进入你的其他回购。

+0

我可以使用存储库线上?毕竟我限制了最后一次修订。 – ted

+0

是的,您可以在线执行转储并加载存储库。 – maddoxej

相关问题