2

我正在转换具有以下符号(以及其他符号)的 CVS 存储库:

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

使用标准转换 cvs2svn 可以正确识别它们。但是,我想在转换过程中进行一些清理。具体来说,我想删除分支符号的冗余“-branch”部分,因为它将位于 svn 的“分支”目录中。我在项目的 symbol_transforms 中添加了以下内容:

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

现在,每个文件都得到“错误:符号'tcm-6.1.0'在...中的多个定义”,因为tcm-6.1.0它既是分支又是标签。我有几个导致此问题的 CVS 符号对。

在我看来,由于源符号不同且目标目录不同,因此应该可以进行此操作。是否有我遗漏的东西,或者这仅仅是 cvs2svn 的一个缺点?

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

--

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

4

2 回答 2

1

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

于 2008-10-01T17:48:19.183 回答
1

RegexpSymbolTransform在解析存储库文件期间,操作级别太低。因此,如果您使用 aSymbolTransform为两个符号赋予相同的名称,它们将被视为一个且相同的符号。

可以在转换后重命名分支和标签,但这需要一个显式的 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 分支 /branches/tcm-6.1.0 。

我能想到的这种方法的唯一缺点是一些自动生成的提交消息cvs2svn(例如,用于创建分支)会提到原始分支名称。

于 2008-10-02T12:59:34.160 回答