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中由于错误的合并基础而出现的合并问题:what';发生什么事了?_Mercurial_Merge_Ancestor - Fatal编程技术网

mercurial中由于错误的合并基础而出现的合并问题:what';发生什么事了?

mercurial中由于错误的合并基础而出现的合并问题:what';发生什么事了?,mercurial,merge,ancestor,Mercurial,Merge,Ancestor,我有一个存储库,其中两个修订版(14321和14319)共享一个父版本(14318)-两个变更集都是14318的直接子版本。然而,修订集查询祖先(14321,14319)不会返回14318,而是返回一个更老的变更集。发生了什么事 乌龟图片截图: 背景:我最近遇到了奇怪的合并冲突,结果是mercurial试图重新应用已合并的更改而引起的。我可以追溯到一个奇怪的合并基选择,它导致两个头部都包含相同的更改-但我不明白为什么会发生这种情况,以及我如何在将来防止它(我选择DVCS部分是为了在第一时间避免

我有一个存储库,其中两个修订版(14321和14319)共享一个父版本(14318)-两个变更集都是14318的直接子版本。然而,修订集查询
祖先(14321,14319)
不会返回14318,而是返回一个更老的变更集。发生了什么事

乌龟图片截图:


背景:我最近遇到了奇怪的合并冲突,结果是mercurial试图重新应用已合并的更改而引起的。我可以追溯到一个奇怪的合并基选择,它导致两个头部都包含相同的更改-但我不明白为什么会发生这种情况,以及我如何在将来防止它(我选择DVCS部分是为了在第一时间避免此类问题…

我想,祖先是14294年。由于您的两个新提交都是合并,因此您现在有多个祖先,这使得选择不明确


不幸的是,没有办法告诉mercurial使用哪一种潜在祖先。

这张图片显示的不是一个而是两个共同的祖先。因此,它看起来像是一个纵横交错的合并案例,合并问题源于选择一个或另一个共同祖先

参考资料:

有人建议使用一种新的合并算法()。然而,自从Mercurial的2.3 sprint之后,这个话题就被卡住了

为了减少这类问题,我建议您建立一个客户机-服务器拓扑,这样开发人员就可以只与官方存储库合并。也许rebase也能帮上忙

交叉合并是这样的:

   B --- D
  / \   / \
 /   \ /   \ 
A     X     F 
 \   / \   /
  \ /   \ /
   C --- E
你的情况是:

           B
-----------o----               } stable/production
      C     \   \       F
------o------o---\------o      } default
       \     D    \    /
        -----------o---        } feature
                   E

A = ?
B = 14318
C = 14294
D = 14319
E = 14321
F = ?
要产生
F
,有两种可能的电路:
B-D-E-F
C-D-E-F
。Mercurial选择了后者

如果没有合并生产分支和功能分支,就可以避免交叉。 修补程序可能已通过默认分支传播到功能分支。日志将是:

           B
-----------o               } stable/production
      C     \       F
------o------o------o      } default
       \    D \    /
        -------o---        } feature
               E

对于合并集的共同祖先的错误基检测,已知一个:


如果任何合并集包含与合并编辑无关的内容,则可能是错误的

错误。。。祖先()是“两个变更集中最伟大的共同祖先”,根据help@LazyBadger:是的,你说得对,但看起来他们对“最伟大”的概念完全是DAG意义上的——14294和14318没有直接关系。当然,使用14294仍然是一个糟糕的猜测,因为它在时间上更老,在图形距离意义上也更远,但对于算法来说,这是一个可以理解的错误。@eamonnerbanne-不,“最大”的意思是latest@LazyBadger:这与问题中的截图相矛盾-显然,最伟大并不一定意味着最新。什么是最新的呢?根据变更集的时间点击?修订号?我们(几乎总是)使用客户机-服务器拓扑结构-我看不出这有什么帮助?它基本上是一个三分支合并:有一个生产分支和一个修补程序变更集(14318):其他两个分支都需要这个。所以他们合并了它:默认分支在14319中这样做,而特征分支在14321中这样做。但是当特性和默认分支合并时,你会看到上面的屏幕截图。是的,这是一个很好的建议。当然,在现实中,它有点复杂;我已经解释了分支名称,所以当大多数提交都是匿名头,后来一个碰巧变成热修复程序时,它们才有意义。因此,对于我们的团队来说,问题在于提交的位置不应该是提交的位置,而且我们的分支的名称令人困惑(回顾过去)——但这有点超出了范围?谢谢你的更新,这样肯定会更有帮助!