我正在努力转换具有以下符号的CVS存储库(其中包括):
tcm-6.1.0-branch
- 分支
tcm-6.1.0
- 标记
使用标准转换cvs2svn可以正确识别它们。但是,我想在转换过程中做一些清理工作。具体来说,我想删除分支符号的冗余'-branch'部分,因为它将位于svn中的'branches'目录中。我将以下内容添加到项目的symbol_transforms中:
RegexpSymbolTransform(r'(.*)-branch', r'\1')
现在我的每个文件都有“错误:符号'tcm-6.1.0'的多个定义”,因为tcm-6.1.0
既是分支又是标记。我有几个CVS符号对导致了这个问题。
在我看来,由于源符号不同且目标目录不同,因此该操作应该是可行的。有没有我缺少的东西,或者这只是cvs2svn的缺点?
如何重命名这些符号,使它们保持独立并产生分支和具有相同名称的标记?
-
如果没有解决方法,我会尝试从转换规则中排除问题符号,然后手动移动它们,不过我宁愿在转换时执行此操作。
答案 0 :(得分:1)
cvs2svn在cvs和svn之间做了很多魔术。这就是为什么你不能“匹配”分支和标签的名称,因为cvs2svn将不知道哪个版本属于哪个目录。 我的建议是使用像svnmucc之类的工具在一次提交中重命名它们。 所以你只有一次提交,然后一切就绪。
答案 1 :(得分:1)
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
自动生成的一些提交消息(例如,用于创建分支)将提到原始分支名称。