我在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。
答案 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到/