了解Mercurial合并逻辑

Mar*_*eon 4 merge mercurial

假设myfile在两个存储库(A和B)中进行了修改.在A中我们做了一个hg pull ../B让我们获得这些变更集:

A1 - A2 - A3 - A4 - A5
        \
          B3 - B4
Run Code Online (Sandbox Code Playgroud)

由于我们有两个头(A5,B4),我们做了一个hg merge.

现在如果有冲突,Mercurial会启动我们的合并工具(超越比较),我们得到三个视图:左边是本地,中间是父,右边是'其他'.鉴于我们的结构,左(本地)是A5,中(父)是A2,右(其他)是B4吗?

其次,Mercurial用于确定需要合并的逻辑究竟是什么?它是否看到有两个版本myfile没有任何孩子?它究竟是如何确定A2是父母的?

Von*_*onC 5

合并工具配置中所述

合并工具使用args的参数列表运行,并扩展了以下变量:

  • $output 扩展到已包含第一个父级版本的现有文件 - 这也是合并结果最终/必须结束的位置
  • $local 扩展为file.orig,它作为工作目录版本中的文件副本创建 - 因此它包含来自第一个父项的未合并版本
  • $ base扩展到/tmp/file~base.*使用共同祖先修订版本创建的(参见参考资料hg debugancestor)
  • $ other扩展到/tmp/file~other.*使用与第一个父项合并的新的第二个父版本中的版本创建的

(是的,"左(本地)是A5,中(父)是A2,右(其他)是B4")

在此输入图像描述

(参见" 执行合并 ")