在此之前,我已经查看了几个有关这个主题的线程,包括以下内容:
我正在考虑将我们的开发组从Subversion转换到Mercurial。在这样做之前,我正在列出通常的利弊清单。
其中一个"优点"是,在Mercurial中合并更加优秀,但到目前为止,我未能找到有力的证据支持这一点。特别是,在HgInit.com上有一种说法,我无法验证:
例如,如果我稍微修改了一个函数,然后将其移动到其他地方,Subversion并不真正记住这些步骤,因此在合并时,它可能认为新的函数只是突然出现。而Mercurial将分别记住这些内容:函数已更改,函数已移动,这意味着如果您也稍微更改了那个函数,那么Mercurial成功合并我们的更改的可能性会更大。
这将是非常有吸引力的功能,但据我所知,这只是空话。我无法验证上述说法。
我创建了一个Mercurial仓库,做了一个Hello World,然后进行了克隆。在其中一个中,我修改了函数,提交了它,然后将其移动,并提交了它。在另一个中,我只是简单地向函数添加了另一个输出行,并进行了提交。
当我进行合并时,我得到的基本上是使用Subversion得到的相同合并冲突。
我知道Mercurial在跟踪文件重命名方面更加出色,还有其他DVCS合并之外的优点,但我对这个例子很感兴趣。Joel Spolsky在这里是错的吗?还是我漏掉了什么?
虽然我在这个领域经验不丰富,但由于Mercurial保留了更多信息,它可以理论上更好地执行合并(如果开发人员也进行频繁的提交)。例如,我认为Mercurial可以从比较多个更改中获取上下文变化,例如,我修改一个函数,提交,移动该函数,提交,然后Mercurial关联这两个部分。
但是,Mercurial的合并似乎没有真正利用这些额外的信息,并且看起来与Subversion操作方式相同。这是正确的吗?