【问题标题】:Merging an outdated branch with HEAD in CVS (Eclipse)在 CVS (Eclipse) 中将过时的分支与 HEAD 合并
【发布时间】:2013-02-27 14:54:12
【问题描述】:

基本上,我们有一个需要与 HEAD 合并的分支(称为 B,它包含一些特定于分支的代码)。我们遇到的问题是该分支是很久以前创建的。从那时起,HEAD 进行了多次更新,增加了许多新功能,并修复了许多错误。 B 分支仍然具有 HEAD 中已经修复的大部分错误,并且缺少一些功能。所以,需要做的是获取分支 B 的一些特性(可能有大约 50 个文件包含新功能 - 我不知道这些文件到底是什么),同时保持 HEAD 的其余部分完好无损。

目前,Eclipse 中的合并工具报告了 1700 多个更改,自动合并会用分支中的代码覆盖 HEAD 中的代码(因此,引入了已经修复的错误)。有没有更好的方法来解决这个问题,而不是经历所有 1700 次更改并手动合并它们?

【问题讨论】:

  • 你标记了分支的基础吗?
  • 直到人们仍然使用 CVS。就个人而言,我建议将整个东西转换为 Subversion,然后尝试这样做,但可能有一个特定的原因推动了 CVS 的继续使用,不是吗?
  • @parsifal:是的,我相信有一个起始标签。
  • @Alan Krueger:这是一个遗留项目,恐怕我们没有机会停止使用 CVS。

标签: java merge cvs branching-and-merging


【解决方案1】:

如果我了解您的问题,您想了解特定分支上的更改,并将这些更改应用到主干。我认为最简单的方法是创建一个补丁文件。

首先将分支的基部和尖端检出到单独的目录中。你说你有一个基本标签,它让你领先于 99% 的 CVS 用户。如果不是这种情况,那么您可以进行基于日期的结帐。找到正确的日期会很痛苦;最简单的方法是查看日志以查找您知道分支上没有更改的文件,并跟踪该分支在修订历史记录中出现的位置。

第二步是创建一个补丁文件,描述对分支所做的所有更改。 here 的说明似乎很完整(我在 Google 上搜索了“创建补丁”并查看了最上面的结果)。

接下来你要做什么取决于补丁有多大,以及自从树枝被砍断后树干发生了多少变化。如果您觉得幸运,最简单的方法是检查主干并按照链接文档中的说明应用补丁。您可能至少会遇到一些故障,并且无论如何您都需要检查每个更改以验证它是否仍然有意义。

另一种方法是打开三个窗口: 窗口 #1 是补丁文件,它将告诉您更改的文件以及其中的更改内容。窗口#2 是分支(尖端)上的文件,因此您可以看到它当前在做什么。 Window #3 是您的行李箱上的文件。在这种方法中,您将代码从 #2 复制到 #3 有意义的地方,而 #1 仅用作复制内容的指南。

不管怎样,虽然 CVS 在分支和合并方面特别痛苦,但没有一个 VCS 擅长合并高度分散的分支(不管 Joel 怎么说)。

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多