从现有模块创建svn存储库,保留历史记录

时间:2015-12-04 09:16:51

标签: svn

我在SVN下有一个遗留项目如下:

Legacy-Repository/trunk/
  |- module1
  |- module2
  |- ...
  '- moduleN

这个遗留设计不符合我们的需求,我需要为每个模块创建一个SVN存储库,同时保留每个模块的历史记录)以获得以下结构:

New-Repository1/trunk/ (content of module1's directory)
New-Repository2/trunk/ (content of module2's directory)
...
New-RepositoryN/trunk/ (content of moduleN's directory)

在此迁移之后,存储库" Legacy-Repository"将被存档。内容在" Legacy-Repository / trunk /"不在模块中的并不重要,不需要迁移。

实现此目的的最佳方法是什么(使用svn命令行)?

提前感谢您的帮助。

注意:我使用的是svn 1.7.14。

2 个答案:

答案 0 :(得分:0)

我认为最好的方法是使用svndumpfilter命令。

基本上,您需要转储整个存储库(使用svnadmin dump命令)并过滤转储以为每个模块生成一个转储。然后,您可以使用svnadmin load在新的SVN存储库中加载每个转储。

以下是svndumpfilter的示例(fullSvnDump.dmp是完整存储库转储):

svndumpfilter include trunk/module1 --drop-empty-revs --renumber-revs < fullSvnDump.dmp > module1.dmp 2> svndump.log &

答案 1 :(得分:0)

la对Alex回答的缺点

  • svnrdump dump URL/TO/Module代替svnadnin dump | svndumpfilter include是1)更短2)不需要完全访问服务器
  • svnadmin load不会也无法更改已恢复转储的路径,只能将“挂载点”更改为具有--parent-dir选项的自定义位置,因此:树,转储为trunk/ModuleN将恢复到新单独仓库的根目录后显示为trunk/ModuleN,而非请求/

完善的解决方案和想法

  • 转储每个子树svnrdump dump(更快,更少浪费空间)
  • 如果“脏”历史不会惹恼你 - 在将转储加载到新存储库后不要立即忘记(不要忘记至少--ignore-uuid选项以防止在所有新存储库之间共享UUID){ {1}} trunk / ModuleN到/
  • 如果你想要干净的历史记录 - 你可以尝试在加载之前“破解”转储(在repo中获取正确的路径),使用SVN-DumpReloc perl-script(未测试)
相关问题