1

对于我的一个应用程序,我正在考虑实现分支/合并。在某些情况下,我不明白如何在没有冲突的情况下合并。让我们以这个为例。

Root 编写了一些代码。A、B 和 C 从他那里提取并添加特征。C 完成,因此 A 和 B 从中提取/合并。我相信它可以通过使用 root 作为基础将它们自己与 C 进行比较来工作。现在 A 和 B 编写更多功能并完成。

现在如果我从 A 拉然后从 B 拉会发生什么?它们的基础是根目录,它们都是从 C 中提取的,因此编辑了相同的行。它如何知道是否存在冲突?如果我编辑 C 写的一行然后从 B 拉出怎么办?我想这将是一个冲突。现在我的最后一个问题是,如果 A 和 B 在从 C 中拉出函数的位置后,会发生什么情况?我想现在归结为差异识别有多好,但我不确定如何从 A 和 B 中提取而不会发生冲突

4

2 回答 2

2

有时你遇到冲突,例如 A 和 B 编辑相同的行(不同)。然后,您需要通过检查它们(并且可能与 A 和 B 交谈!)手动合并更改,而不是依赖 DVCS 为您合并。

您可能还会遇到逻辑冲突(A 和 B 更改了文件的不同部分,因此没有明显的冲突,并且 DVCS 可以处理合并,但是这些部分打破了彼此的假设,因此引入了一个错误)。版本控制无法解决这个问题,只有开发人员之间的沟通和单元测试。

于 2012-10-28T22:45:10.850 回答
2

它如何知道是否存在冲突?

  • 要么是因为 DVCS 会告诉您:如果编辑了相同的行,它将触发合并的手动解析
  • 或者因为你:
    • 足够了解代码以发现语义冲突
    • 有一个扩展的单元测试电池,它将消除语义冲突。

但正如“仍然不喝 DVCS Kool-Aid ”的评论中所提到的,定期提交和合并(比使用 CVCS、集中式版本控制系统快得多)是避免逻辑冲突或使它们尽可能小的关键尽可能。
有关语义冲突的更多信息,请参阅这篇Martin Fowler 文章

于 2012-10-30T08:08:56.063 回答