使用cvs2svn时,如何重命名符号,以使分支和标签解析为相同的名称?

时间:2020-03-06 14:58:32  来源:igfitidea点击:

我正在转换具有以下符号(以及其他符号)的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自动生成的提交消息(例如,用于创建分支)将提到原始的分支名称。