Mercurial如何在内部合并?

时间:2014-02-07 20:27:41

标签: mercurial branching-and-merging

关于git是如何合并的,有一篇关于quora的漂亮文章: http://www.quora.com/Git-revision-control/How-does-git-merge-work

我想知道Mercurial是否存在这样的事情。

我承认我的动机是Mercurial对于自动解决冲突似乎真的很愚蠢,但如果没有关于mercurial如何合并的具体信息,我就无法为Git形成争论。 (也许我疯了,方法是一样的,无论我在哪里都找不到关于HG如何合并的信息。)

另外我听说HG是超级可配置的,所以如果有一个工具让合并不那么笨,我很乐意听到它。

作为HG似乎做的愚蠢的例子,它与其他空洞发生了许多冲突,例如:

<<<<<<<< local
[some new code...]
========
>>>>>>>> other

编辑:所以,我也在寻找一种能够智能地自动解决冲突的合并工具。就像,它应该能够解决上面的例子,这很难解决。

1 个答案:

答案 0 :(得分:1)

Mercurial在很大程度上将合并留给了外部程序。见

https://www.mercurial-scm.org/wiki/MergeToolConfiguration

https://www.mercurial-scm.org/repo/hg/help/merge-tools

从最后一页开始:

  

Mercurial在决定使用哪种合并工具时使用这些规则:

     
      
  1. 如果已使用--tool选项指定工具进行合并或   解决,它被使用。如果它是merge-tools中工具的名称   配置,使用其配置。否则指定工具   必须由shell执行。

  2.   
  3. 如果是“HGMERGE”环境变量   如果存在,则使用其值,并且必须由shell执行。

  4.   
  5. 如果要合并的文件的文件名与中的任何模式匹配   merge-patterns配置部分,第一个可用的合并工具   对应于匹配模式使用。这里,二进制功能   不考虑合并工具。

  6.   
  7. 如果设置了ui.merge,它将是   接下来考虑。如果该值不是已配置工具的名称,   使用指定的值,并且必须由shell执行。   否则,如果可用,则使用命名工具。

  8.   
  9. 如果merge-tools配置中存在任何可用的合并工具   部分,使用具有最高优先级的部分。

  10.   
  11. 如果名为“hgmerge”的程序可以   在系统上找到它,它被使用 - 但它默认不会被使用   用于符号链接和二进制文件。

  12.   
  13. 如果要合并的文件不是二进制文件而不是符号链接,那么   使用“internal:merge”。

  14.         

    8.文件合并失败,必须在提交前解决。

         

    注意:选择合并程序后,Mercurial会默认尝试   首先使用简单的合并算法合并文件。只有它没有   因为冲突的变化而成功Mercurial将实际执行   合并计划。是否首先使用简单合并算法即可   由合并工具的预合并设置控制。 Premerge是   默认情况下启用,除非文件是二进制文件或符号链接。