使用cvs2svn时,如何重命名符号,以使分支和标签解析为相同的名称?
我正在转换具有以下符号(以及其他符号)的CVS存储库:
tcm-6.1.0-branch
-分支tcm-6.1.0
-一个标记
使用标准转换cvs2svn可以正确识别它们。但是,我想在转换过程中进行一些清理。具体来说,我想删除分支符号的冗余" -branch"部分,因为它将位于svn的" branch"目录中。我在项目的symbol_transforms中添加了以下内容:
RegexpSymbolTransform(r'(.*)-branch', r'')
现在,我对每个文件都以"错误:...中的符号'tcm-6.1.0'的多个定义"结尾,因为tcm-6.1.0
既是分支又是标签。我有几个CVS符号对导致此问题。
在我看来,由于源符号不同,而目标目录也不同,因此该操作应该是可能的。有什么我想念的东西吗,或者这仅仅是cvs2svn的缺点吗?
如何重命名这些符号,使它们保持分隔并导致具有相同名称的分支和标记?
--
如果没有解决方法,我将尝试从转换规则中排除问题符号,然后手动移动它们,尽管我宁愿在转换时进行操作。
解决方案
cvs2svn在cvs和svn之间做了很多魔术。这就是为什么我们不能"匹配"分支和标签的名称的原因,因为这样cvs2svn将不知道哪个版本属于哪个目录。
我的建议是在以后使用svnmucc之类的工具在一次提交中重命名它们。
因此,我们只需执行一次提交,然后一切就绪。
在解析存储库文件期间,RegexpSymbolTransform
的操作级别太低。因此,如果我们使用" SymbolTransform"为两个符号赋予相同的名称,则它们将被视为一个和相同的符号。
可以在转换后重命名分支和标签,但这将需要一个显式的SVN提交,该提交将永远保留在历史记录中,从而使历史记录探索变得更加复杂。
相反,我们应该使用原始名称转换分支,然后告诉cvs2svn将其存储到SVN路径/branches/tcm-6.1.0。这样,该符号将在带有所需名称的SVN分支的正确位置结束,但仍会被cvs2svn视为与类似名称的标签不同。
可以使用--symbol-hints = symbol-hints.txt命令行选项或者符号策略策略" SymbolHintsFileRule('symbol-hints.txt')"来完成,其中" symbol-hints.txt"是包含如下内容的行的文件:
. tcm-6.1.0-branch branch /branches/tcm-6.1.0 .
我能想到的这种方法的唯一缺点是,某些由cvs2svn
自动生成的提交消息(例如,用于创建分支)将提到原始的分支名称。