2008-10-01 34 views
2

我在转换具有下列符号(等等)CVS仓库工作:使用cvs2svn时,如何重命名符号以使分支和标记解析为相同的名称?

tcm-6.1.0-branch - 一个分支
tcm-6.1.0 - 标签

使用标准转化cvs2svn它们标识正确。不过,我想在转换过程中进行一些清理。具体而言,我想删除分支符号中多余的'-branch'部分,因为它将位于svn中的'branches'目录中。我添加了以下到项目的symbol_transforms:

RegexpSymbolTransform(r'(.*)-branch', r'\1') 

现在我结束了“ERROR:符号‘TCM-6.1.0’在......的多重定义”为每一个文件,因为tcm-6.1.0既是一个分支和一个标签。我有几个CVS符号对导致这个问题。

在我看来,由于源符号不同且目标目录不同,所以此操作应该是可能的。有什么我失踪或这只是cvs2svn的缺点?

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

-

如果没有解决办法,我会尝试从转换规则排除问题的符号,并通过手之后移动它们,但我宁愿在转换时间做到这一点。

回答

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

1

cvs2svn在cvs和svn之间做了很多魔术。这就是为什么你不能“匹配”分支和标签的名称,因为那么cvs2svn将不知道哪个版本属于哪个目录。 我的建议是使用类似svnmucc这样的工具在一次提交中重命名它们。 所以你有一个单一的提交,然后一切都到位。

相关问题