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

时间:2008-10-01 13:28:04

标签: svn cvs cvs2svn

我正在努力转换具有以下符号的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的缺点?

如何重命名这些符号,使它们保持独立并产生分支和具有相同名称的标记?

-

如果没有解决方法,我会尝试从转换规则中排除问题符号,然后手动移动它们,不过我宁愿在转换时执行此操作。

2 个答案:

答案 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自动生成的一些提交消息(例如,用于创建分支)将提到原始分支名称。