Mercurial,冲突,合并,以及后来的进一步冲突,Mercurial是否记得最初的解决方案?

ang*_*son 5 merge mercurial conflict merge-conflict-resolution

想象一下这种情况:

  1. Alice和Bob都克隆了一个中央主Mercurial存储库,包含1个文本文件
  2. Alice和Bob都对文件中的同一行进行了更改,并提交
  3. Bob推回中央存储库,但不是Alice
  4. 爱丽丝现在进入她的存储库,注意到她现在有两个头,并合并
  5. 由于合并是冲突,她解决了冲突
  6. 爱丽丝然后提交但不推
  7. 现在,Bob作进一步的修改文件,在该文件的一些其他位置(即远不及初步改变)并提交,推
  8. 爱丽丝,在她的合并文件,确实在同一位置的类似变化鲍勃只是改变了,并承诺
  9. 爱丽丝拉,并发现另一个双头存储库,她合并

以下是上述场景的不同视图

("CHANGE"之后的数字表示该人改变了文件的"部分X".如果两个用户都改变了相同的部分,我们前面会发生合并冲突,如果他们改变了不同,那么就没那么多了)

    Alice                    Bob
    CLONE MASTER             CLONE MASTER
    -----------------------------------------
    CHANGE 1                               <-----+
    COMMIT                                       +-- upcoming merge conflict
    -----------------------------------------    |
                             CHANGE 1      <-----+
                             COMMIT
                             PUSH
    -----------------------------------------
    PULL                                   <-- Bob's change +1 head
    MERGE                                  <-- Attempt to get rid of extra head
    RESOLVE CONFLICT                       <-- Resolve merge conflict
    COMMIT
    -----------------------------------------
                             CHANGE 2      <-----+
                             COMMIT              +-- yet another merge
                             PUSH                |   conflict ahead
    -----------------------------------------    |
    CHANGE 2                               <-----+
    COMMIT
    PULL                                   <-- Bob's change, again +1 head
    MERGE                                  <-- Attempt to get rid of extra head
    RESOLVE ???

在这一点上,我的问题是:

  • 合并工具是否会将她的第一个合并解决方案考虑在内?由于鲍勃从未接受过Alice的更改,他的副本仍然没有任何Alice所做的更改,她的初始更改(与Bob的冲突),她的合并以及她的最新更改,这与Bob的最新更改有冲突.

如果我只是简单地采用了Bob的文件版本和Alice的文件版本,并将其提供给任何合并程序,那么它会将这两个更改标记为冲突.

换句话说,冲突工具是否会试图让Alice解决原始冲突和新冲突,或者只解决最新冲突?

我猜测(我还没试过这个,仍然试图构建某种测试脚本来测试这个问题),Mercurial只会要求Alice解决最新的冲突.

如果我将Mercurial配置为使用第三方差异/合并程序怎么办?这仍然适用吗?例如,我已经将我的安装配置为使用Beyond Compare,这两个文件(Bob只有他的更改和Alice的更改+合并解决方案)是否存在初始分辨率?换句话说,如果使用Beyond Compare,那么这里也会发生正确的事情(假设它完全没有.)

Ry4*_*ase 5

Mercurial只需要解决最新的冲突,并且可以使用外部更改工具.

当Alice进行第二次合并时,她将自己之前的合并与bob的新delta合并,只有这种变化需要重新整合.

真的很清楚图表,BTW.谢谢