在它出现之前,我已经查看了关于这个主题的几个线程,包括这些:
我正在考虑为我们的开发组切换到 Mercurial(来自 Subversion)。在我这样做之前,我正在做通常的优点/缺点列表。
我的“优点”之一是合并在 Mercurial 中更胜一筹,但到目前为止,我还没有找到令人信服的证据。也就是说,在 HgInit.com 上发表了我无法验证的声明:
例如,如果我稍微改变一个函数,然后将它移动到其他地方,Subversion 并不会真正记住这些步骤,所以当需要合并时,它可能会认为一个新函数突然出现. 而 Mercurial 会分别记住这些内容:函数更改,函数移动,这意味着如果您也稍微更改了该函数,Mercurial 更有可能成功合并我们的更改。
这将是非常引人注目的功能,但据我所知,这只是热空气。我一直无法验证上述说法。
我创建了一个 Mercurial 存储库,做了一个 Hello World,然后克隆了它。在其中,我修改了函数,提交它,然后移动它,然后提交它。在另一个中,我只是在函数中添加了另一个输出行并提交。
当我合并时,我得到的合并冲突与使用 Subversion 时基本相同。
我知道 mercurial 可以更好地跟踪文件重命名,并且 DVCS 除了合并之外还有其他优势,但我对这个例子很感兴趣。乔尔·斯波尔斯基(Joel Spolsky)是不是在这里偏离基地,还是我错过了什么?
我在这方面没有经验,但似乎因为 Mercurial 保留了更多信息,理论上它可以在合并方面做得更好(如果开发人员也经常签入)。例如,我认为 Mercurial 通过比较多个更改来获取上下文更改是可行的,例如,我修改函数、签入、移动函数、签入,然后 Mercurial 将这两个部分关联起来。
然而,Mercurial 的合并似乎并没有真正利用添加的信息,并且似乎与 Subversion 的操作方式相同。它是否正确?