【发布时间】:2011-06-26 04:56:23
【问题描述】:
在它出现之前,我已经查看了关于这个主题的几个主题,包括这些:
我正在考虑为我们的开发组切换到 Mercurial(来自 Subversion)。在我这样做之前,我正在做通常的优点/缺点列表。
我的“优点”之一是 Mercurial 中的合并更胜一筹,但到目前为止,我还没有找到令人信服的证据。也就是说,在 HgInit.com 上发表了我无法验证的声明:
例如,如果我稍微改变一个函数,然后将它移动到其他地方,Subversion 不会真正记住这些步骤,所以当需要合并时,它可能会认为一个新函数刚刚出现蓝色的。而 Mercurial 会分别记住这些内容:函数已更改,函数已移动,这意味着如果您也稍微更改了该函数,Mercurial 更有可能成功合并我们的更改。
这将是非常引人注目的功能,但据我所知,这只是热空气。我一直无法验证上述说法。
我创建了一个 Mercurial 存储库,做了一个 Hello World,然后克隆了它。在其中,我修改了函数,提交它,然后移动它,然后提交它。在另一个中,我只是在函数中添加了另一个输出行并提交。
当我合并时,我得到的合并冲突与使用 Subversion 时基本相同。
我知道 mercurial 可以更好地跟踪 file renames,并且 DVCS 除了合并之外还有其他优势,但我对这个示例很感兴趣。 Joel Spolsky 是不是在这里偏离了基地,还是我错过了什么?
我在这方面没有经验,但似乎因为 Mercurial 保留了更多信息,它在理论上可以在合并方面做得更好(如果开发人员也经常签入)。例如,我认为 Mercurial 通过比较多个更改来获取上下文更改是可行的,例如,我修改一个函数、签入、移动函数、签入,然后 Mercurial 将这两个部分关联起来。
但是,Mercurial 的合并似乎并没有真正利用添加的信息,并且似乎与 Subversion 的操作方式相同。这是正确的吗?
【问题讨论】:
-
+1 有趣 - 我们正在将我们的数 GB svn 存储库迁移到 mercurial,其中一大卖点是更容易合并。
-
我认为这句话中的关键部分是“更有可能”。如果您观看视频,Linus Torvalds 将 Git 描述为切片面包之后的下一个最佳产品,他也声称 Git 可以跟踪在代码库中移动的函数。我猜大部分是推销员炒作,因为我已经验证 Mercurial 和 Git 实际上都无法跟踪从一个文件移动到另一个文件的代码。该代码仅被跟踪为“在此处删除某些内容”和“在此处添加了其他内容”。
-
话虽如此,在使用了 Mercurial 之后,我现在不会使用 Subversion。即使它不符合此处描述的特定场景,它在合并方面也很出色。所以,是的,如果你能遵循 Mercurial 的做事方式,Mercurial 在合并方面比 Subversion 更好。如果你不这样做,你可以把事情搞得一团糟(但你也可以在 Subversion 中这样做。)
-
是的,这就是我遇到问题的确切短语。在没有概率方法的自动合并之类的事情中,如何“更有可能”成功?最后,合并变更集和合并最终结果在 Mercurial 和 SVN 中似乎相同
标签: svn mercurial merge branching-and-merging