Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial内部如何合并?_Mercurial_Branching And Merging - Fatal编程技术网

Mercurial内部如何合并?

Mercurial内部如何合并?,mercurial,branching-and-merging,Mercurial,Branching And Merging,在quora上有一篇关于git如何进行合并的漂亮文章: 我想知道Mercurial是否存在这样的事情 我承认,我这样做的动机是,Mercurial在自动解决冲突方面似乎真的很愚蠢,但如果没有Mercurial如何进行合并的具体信息,我就无法对Git进行论证。(也可能我疯了,方法也是一样的,不管我在哪里都找不到关于HG合并的信息。) 我还听说HG是超级可配置的,所以如果有一个工具可以让合并变得不那么愚蠢,我很想听听它 作为HG看似愚蠢的一个例子,它与其他空洞的语言产生了许多冲突,例如: <

在quora上有一篇关于git如何进行合并的漂亮文章:

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

我承认,我这样做的动机是,Mercurial在自动解决冲突方面似乎真的很愚蠢,但如果没有Mercurial如何进行合并的具体信息,我就无法对Git进行论证。(也可能我疯了,方法也是一样的,不管我在哪里都找不到关于HG合并的信息。)

我还听说HG是超级可配置的,所以如果有一个工具可以让合并变得不那么愚蠢,我很想听听它

作为HG看似愚蠢的一个例子,它与其他空洞的语言产生了许多冲突,例如:

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

编辑:所以,我也在寻找一个合并工具,可以智能地自动解决冲突。与之类似,它应该能够解决上面的示例,解决起来非常简单。

Mercurial主要将合并留给外部程序。看

从最后一页开始:

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

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

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

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

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

  • 如果合并工具配置中存在任何可用的合并工具 节中,使用优先级最高的一个

  • 如果名为“hgmerge”的程序可以 在系统上找到时,将使用它-但默认情况下不会使用它 用于符号链接和二进制文件

  • 如果要合并的文件不是二进制文件且不是符号链接,则 使用“内部:合并”

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

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


    不知道HG是如何做到的,但是关于Git合并的链接非常好。谢谢。Mercurial在自动合并方面并不笨,至少它的合并质量与Git相同。我希望,@mpm能回答得更好更深入啊,我想我几天前在Mercurial irc上和mpm聊过。很酷的家伙。我将添加一个例子,说明为什么我认为它看起来有不同的质量。我只是做了另一个合并,它没有在肯定存在冲突的地方标记冲突。因此,我的代码出现了倒退。我觉得他们使用的方法是在真正发生冲突时随机选择哪一方,然后当有新代码时,将其标记为冲突。因为有人破坏了分支的访问权限,使我无法提交一天的工作,而同事覆盖了以前的推送,我今天被解雇了。我从没想过源代码管理工具会让我失业;;这是一个伟大的第一步。现在HG的premerge算法使用的决策流是什么?除了标记文件之间的差异外,internal:merge还有什么作用吗?