0

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

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

4

1 回答 1

0

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

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

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

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

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

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

于 2013-02-27T17:27:37.883 回答