【发布时间】:2018-09-08 16:25:57
【问题描述】:
我已经使用 git 多年了,最近为了一个项目改用 mercurial。在过去的 6 个月里,我已经通过命令行很好地学会了如何使用 Mercurial。
这可能是我的想象,但在我看来,mercurial 在合并方面要差得多,并且会导致更多冲突的文件。我会经常将默认分支合并到我的功能分支中,它有时会做一些非常时髦的事情,并且无法自动合并看起来应该在视觉上很好地合并的文件 - I.E.同一行等没有变化。
我已经进行了大量研究,以了解合并算法中可能存在的差异,但运气不佳。大多数文章都是人们关于 git 和 mercurial 如何在幕后工作的观点和信息,而没有过多关注合并算法本身以及优点/缺点以及差异的简单语言示例。
我总是使用良好的合并策略并通过树向上合并,并且在没有先合并到远程以确保没有冲突的情况下永远不会向下进入 default(hg)/master(git) 分支。
到目前为止,我在研究中发现的是:
1) Mercurial 无法合并或存在与多个父级合并的问题。我不确定有人会如何陷入这种情况,但也许这很常见?
这是真的吗?这会在日常开发中更频繁地导致合并冲突吗?
2) Mercurial 不支持章鱼合并,而 git 支持。
对于章鱼合并,我说“谁在乎!”,这不是必需的。
除此之外,似乎合并算法是平等创建的?是否可以更改合并算法?有没有这方面的好文章?
如果您发布有关 k3diff、p4merge 和 meld 等合并工具的信息,那么您就没有抓住重点 - 我想要在解决冲突之前获得有关自动合并策略的信息。
感谢您提供任何有用的参考和/或信息!
【问题讨论】:
-
您的#1 与#2 有何不同?与多个父母合并是章鱼合并。
-
你能提供一些例子吗?
-
@max630:我很确定他在第 1 项中的意思是“多个合并基础”,而不是“多个父母”(这就是我在回答中提到的)。
-
关于一个有趣话题的好问题。
-
我发现注意行尾、自动格式化和空格很重要。从考虑你的 IDE 到你的操作系统,到处都会影响 git 程序对文字数据的解释。我会为 mac 程序、windows 程序和多操作系统软件项目推荐不同的步骤。例如,Git 的 auto-crlf 设置 = true 在 mac 和 windows 之间共享的项目上效果不佳。自从这篇文章以来,我还没有切换回 mercurial 来分析类似的问题或偏好选项。