使用 cvs2svn 时,如何重命名符号以使分支和标记解析为相同的名称?
Posted
技术标签:
【中文标题】使用 cvs2svn 时,如何重命名符号以使分支和标记解析为相同的名称?【英文标题】:When using cvs2svn how can you rename symbols such that a branch and tag resolve to the same name? 【发布时间】:2008-10-01 13:28:04 【问题描述】:我正在转换具有以下符号(以及其他符号)的 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 的一个缺点?
如何重命名这些符号,使它们保持独立并产生具有相同名称的分支和标记?
--
如果没有解决办法,我会尝试从转换规则中排除有问题的符号,然后手动移动它们,尽管我宁愿在转换时这样做。
【问题讨论】:
【参考方案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 分支 /branches/tcm-6.1.0 .
我能想到的这种方法的唯一缺点是,cvs2svn
自动生成的一些提交消息(例如,用于创建分支)会提及原始分支名称。
【讨论】:
【参考方案2】:cvs2svn 在 cvs 和 svn 之间做了很多神奇的事情。这就是为什么你不能“匹配”分支和标签的名称,因为这样 cvs2svn 将不知道哪个版本属于哪个目录。 我的建议是使用svnmucc 之类的工具在一次提交中重命名它们。 所以你有一个单一的提交,然后一切就到位了。
【讨论】:
以上是关于使用 cvs2svn 时,如何重命名符号以使分支和标记解析为相同的名称?的主要内容,如果未能解决你的问题,请参考以下文章