了解Mercurial合并逻辑

时间:2011-04-08 02:56:27

标签: mercurial merge

假设myfile在两个存储库(A和B)中被修改。在A中,我们执行了hg pull ../B来获取这些变更集:

A1 - A2 - A3 - A4 - A5
        \
          B3 - B4

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

现在如果有冲突,Mercurial会启动我们的合并工具(Beyond Compare)并获得三个视图:left是local,center是parent,右边是'other'。鉴于我们的结构,左(本地)是A5,中(父)是A2,右(其他)是B4吗?

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

1 个答案:

答案 0 :(得分:5)

正如Merge Tool Configuration

中所述
  

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

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

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

enter image description here

(参见“performing the merge”)