从现有模块创建svn存储库,保留历史记录
我在SVN下有一个遗产项目,组织如下:从现有模块创建svn存储库,保留历史记录,svn,Svn,我在SVN下有一个遗产项目,组织如下: Legacy-Repository/trunk/ |- module1 |- module2 |- ... '- moduleN 这种传统设计不符合我们的需要,我需要为每个模块创建一个SVN存储库,同时保留每个模块的历史记录),以获得以下结构: New-Repository1/trunk/ (content of module1's directory) New-Repository2/trunk/ (content of module2
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/trunk/”中不在模块中的内容并不重要,不需要迁移
实现这一点(使用svn命令行)的(最佳)方法是什么
提前感谢你的帮助
注意:我使用的是SVN1.7.14 我认为最好的方法是使用命令 基本上,您需要转储整个存储库(使用命令)并过滤转储,以便为每个模块生成一个转储。然后,您可以使用
svnadmin load
将每个转储加载到新的SVN存储库中
以下是svndumpfilter
的示例(fullSvnDump.dmp是完整的存储库转储):
svndumpfilter包括中继线/模块1——删除空转数——重新编号转数module1.dmp 2>svndump.log&
对亚历克斯答案的不足提出质疑
而不是svnrdump dump URL/TO/Module
较短1)不需要完全访问服务器svnadnin dump | svndumpfilter include
不会也不能更改还原转储的路径,只能使用svnadmin load
选项将“装载点”更改为自定义位置,因此:在还原到新的单独repo根目录后,转储为--parent dir
的树也将显示为trunk/ModuleN
,而不是请求的trunk/ModuleN
- 使用
转储每个子树(更快、更少浪费空间)svnrdump Dump
- 如果“脏”历史记录没有让您烦恼-在将转储加载到新存储库后不要立即忘记(至少不要忘记
选项,以防止在所有新回购之间共享uuid)--忽略uuid
中继/模块到/svn mv
- 如果您想要干净的历史记录,您可以尝试在加载之前使用perl脚本(未经测试)对转储进行“破解”(在repo中获得正确的路径)
svnadmin dump
和svnadmin load
的例子,但是这些命令的使用非常简单(命令名+repo URL)。。。这不是一个友好的方式来迎接新的贡献者…@ Alne ReNLL JE Ne Suas Pas路易斯D'O'Tr.AIM Apple Tead Toul Le MunDeDead尝试了这种方法来产生转储,它是有效的,但是SvnRDIP确实更简单。关于加载部分,@lazy獾的方法还需要svnadmin命令才能使用--ignore uuid。总的来说,我认为没有理由对这个答案投反对票(因此我给它一个+1)。。。虽然不是最好的,但它很有用。/trunk/moduleXXX
是遗留模块根目录的路径吗(不是图表中的obvoius)?是的。所有模块都在“主干”中,谢谢您的回答。我会尝试这样做,并会给你一个反馈。svnrdump工作正常,但SVN DumpReloc无法正常使用。事实上,它依赖于转储流格式v2,我使用的svnrdump版本生成v3转储。我必须找到另一种方法来“重新定位”代码(可能sed应该做这项工作)@kraal-从代码中删除版本检查或将$head=~/^SVN fs dump格式中的版本替换为3版本:\s*2\s*$/
我面临另一个问题:当我执行svnrdump转储时https://.../branches/MyBranch/module1/ >module1.dump
,然后执行grep-节点路径module1.dump
,我看到转储包含的文件的节点路径是../MyBranch/module2/
,换句话说,它似乎没有将转储限制到我指定的目录(svnrdump version:1.7.14)@kraal-只有在某些修订中触及了两个模块中的文件时:没有提到的工具拆分修订,因为修订是原子操作,不是每个文件|目录操作
svndumpfilter include trunk/module1 --drop-empty-revs --renumber-revs < fullSvnDump.dmp > module1.dmp 2> svndump.log &