如何清理 CVS 供应商分支导入?

Posted

技术标签:

【中文标题】如何清理 CVS 供应商分支导入?【英文标题】:How do I clean up CVS vendor branch imports? 【发布时间】:2013-11-23 16:11:42 【问题描述】:

我有一个 CVS 存储库,其目录包含两个供应商分支。初始代码是从一个来源获得的,并使用供应商名称 X 签入。几年后,新代码使用另一个供应商分支名称 Y 签入。

如果我在文本编辑器中查看 rcs 文件 (FILE,v),我会看到 X:1.1.1、一些标签……然后是 Y:1.1.1

这并没有引起我在使用 CVS 时所知道的任何问题,但现在我想使用 cvs2svn 迁移到 Subversion。

我从 cvs2svn 收到如下错误:

警告:在“/home/cvs/src/contrib/one-true-awk/FILES,v”中:分支 '1.1.1' 已经有名字'Y',不能也有名字'X',忽略 后者

理想情况下,我想在整个历史记录中使用较新的供应商标签 Y,但我也愿意让它消失并使用旧标签。无论哪种方式,我都需要清理它,以便 cvs2svn 可以将存储库转换为 Subversion。

我可以在 CVS 的文件上运行任何命令来修复 .v 文件中的这种混乱或手动步骤吗?我已经尝试删除较新的 Y 分支线,但由于提交中的疯狂编号,仅此一项不起作用。由于第二次导入而创建了 1.2 修订版,它也导致 cvs2svn 失败。

【问题讨论】:

确实是棘手的事情。也很难找到这两件事:①供应商分支编号必须是奇数,而不是偶数,②您对每个来源使用不同的供应商分支(例如,1.1.1 用于 $parent_bsd,1.1.3 用于 $parent_of_parent_bsd,1.1.101 用于FSF,XF86 为 1.1.103,lynx 为 1.1.109 等)⇒ 最终必须建立一个项目全球供应商注册表(分支标签和编号)...... 【参考方案1】:

我最后询问了 cvs2svn 用户邮件列表。我收到了 Michael Haggerty 的以下回复:

我不相信这个错误可能来自两次导入。 AFAIK 每次导入时,您都会创建一个新的供应商分支;例如1.1.1, 1.1.3 等(最后一个数字对于供应商分支总是奇数),每个供应商分支都会有自己的符号名称。你的情况 正在经历的是您只有一个供应商分支 1.1.1,并且 它有两个符号名称,“X”和“Y”。

如果您告诉 cvs2svn 只是忽略不需要的符号名称,那么 转换应该毫无怨言地进行。为此,您需要 通过选项文件方法启动 cvs2svn,然后使用 忽略符号转换。有关文档,请参阅 cvs2svn-example.options。

如果您想非常小心,您可能首先要验证 您忽略的符号名称在每个 文件。或者,我认为它也可以转换不需要的符号 name 变成想要的符号名称,因为 cvs2svn 忽略符号 以 相同 值出现两次。这需要类似

RegexpSymbolTransform(r'X', r'Y')

然后我使用 IgnoreSymbolTransform 来隐藏多余的符号。

此外,由于文件已在 HEAD 中修补,然后发生了更新的导入,我遇到了次要错误。通过强制提交文件,我能够让它们回到 HEAD 并避免这种情况:

错误:文件 '/home/cvs/src/contrib/one-true-awk/FIXES,v' 具有默认分支 = 1.1.1,但也是修订版 1.2

【讨论】:

以上是关于如何清理 CVS 供应商分支导入?的主要内容,如果未能解决你的问题,请参考以下文章

Git 中的供应商分支

如何在 JBoss 7.1 中配置外部供应商 SSL 证书

优先队列式分支限界法-最小重量机器设计问题

两道关于回溯法,分支限界法的算法题

无法将供应商类导入 CakePHP 2.5.1 中的组件

如何缓存 Rails webpack 包