关于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
编辑:所以,我也在寻找一种能够智能地自动解决冲突的合并工具。就像,它应该能够解决上面的例子,这很难解决。
答案 0 :(得分:1)
Mercurial在很大程度上将合并留给了外部程序。见
https://www.mercurial-scm.org/wiki/MergeToolConfiguration
和
https://www.mercurial-scm.org/repo/hg/help/merge-tools
从最后一页开始:
Mercurial在决定使用哪种合并工具时使用这些规则:
如果已使用--tool选项指定工具进行合并或 解决,它被使用。如果它是merge-tools中工具的名称 配置,使用其配置。否则指定工具 必须由shell执行。
如果是“HGMERGE”环境变量 如果存在,则使用其值,并且必须由shell执行。
如果要合并的文件的文件名与中的任何模式匹配 merge-patterns配置部分,第一个可用的合并工具 对应于匹配模式使用。这里,二进制功能 不考虑合并工具。
如果设置了ui.merge,它将是 接下来考虑。如果该值不是已配置工具的名称, 使用指定的值,并且必须由shell执行。 否则,如果可用,则使用命名工具。
如果merge-tools配置中存在任何可用的合并工具 部分,使用具有最高优先级的部分。
如果名为“hgmerge”的程序可以 在系统上找到它,它被使用 - 但它默认不会被使用 用于符号链接和二进制文件。
- 醇>
如果要合并的文件不是二进制文件而不是符号链接,那么 使用“internal:merge”。
8.文件合并失败,必须在提交前解决。
注意:选择合并程序后,Mercurial会默认尝试 首先使用简单的合并算法合并文件。只有它没有 因为冲突的变化而成功Mercurial将实际执行 合并计划。是否首先使用简单合并算法即可 由合并工具的预合并设置控制。 Premerge是 默认情况下启用,除非文件是二进制文件或符号链接。