想象一下这个场景:
- Alice 和 Bob 都克隆了一个中央主 Mercurial 存储库,其中包含 1 个文本文件
- Alice 和 Bob 都对文件中的同一行进行了更改,并提交
- Bob 推送回中央存储库,而不是 Alice
- Alice 现在拉入她的存储库,注意到她现在有两个头,然后合并
- 由于合并是冲突,她解决了冲突
- Alice 然后提交但不推送
- Bob 现在在文件的其他位置(即,离初始更改不远)对文件进行进一步更改,然后提交并推送
- Alice 在她的合并文件中,在 Bob 刚刚更改的同一位置进行了类似的更改,并提交
- 爱丽丝拉,并发现另一个双头存储库,她合并
这是上述场景的不同视图
(“CHANGE”后面的数字表示该人更改了文件的“部分X”。如果两个用户都更改了相同的部分,我们将面临合并冲突,如果他们更改不同,则没有那么多)
爱丽丝鲍勃 克隆大师 克隆大师 ----------------------------------------- 改变 1 <-----+ COMMIT +--即将发生的合并冲突 ------------------------------------------ | 改变 1 <-----+ 犯罪 推 ----------------------------------------- PULL <-- Bob 的变化 +1 头 MERGE <-- 尝试去除多余的头部 RESOLVE CONFLICT <-- 解决合并冲突 犯罪 ----------------------------------------- 改变 2 <-----+ COMMIT +-- 又一次合并 推 | 前面的冲突 ------------------------------------------ | 改变 2 <-----+ 犯罪 PULL <-- Bob 的变化,再次 +1 头 MERGE <-- 尝试去除多余的头部 解决 ???
在这一点上,我的问题是:
- 合并工具会考虑她的第一个合并决议吗?由于 Bob 从未提取 Alice 的更改,因此他的副本仍然没有 Alice 所做的任何更改、她的初始更改(与 Bob 的冲突)、她的合并以及她的最新更改(与 Bob 的最新更改冲突) .
如果我只是将 Bob 的文件版本和 Alice 的文件版本提供给任何合并程序,它会将这两个更改标记为冲突。
换句话说,冲突工具会尝试要求 Alice 解决原始冲突和新冲突,还是只解决最新的冲突?
我猜(我还没有尝试过,仍在尝试构建某种测试脚本来测试这个问题)Mercurial 只会要求 Alice 解决最新的冲突。
如果我将 Mercurial 配置为使用第 3 方差异/合并程序会怎样?这仍然适用吗?例如,我已将我的安装配置为使用Beyond Compare,是否会在有或没有初始分辨率的情况下给出这两个文件(Bob 的只有他的更改,而 Alice 的只有他的更改 + 合并分辨率)?换句话说,如果使用Beyond Compare,这里也会发生正确的事情(假设它确实发生了。)