【问题标题】:Mercurial - differences merging repository A->B vs B->A?Mercurial - 合并存储库A-> B vs B-> A的差异?
【发布时间】:2011-08-01 11:18:56
【问题描述】:

给定存储库 A 和存储库 B(从变更集 A2 的克隆创建):

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

假设我们想将这两个存储库合并在一起。如果我们将 repo B 合并到 repo A 与将 repo A 合并到 repo B 有什么区别吗?

我能想到的唯一差异是合并工具 local/base arguments 会根据您选择的选项而反转。还有其他需要注意的区别吗?

【问题讨论】:

  • 术语注释:您合并 heads 而不是 repositories(可能有多个 head)。
  • 我更新了问题以使用正常的 Mercurial 术语。
  • @Martin,我恢复了编辑。我们的情况是我们有两个存储库 - A 和 B。我们可以去 A 并执行 hg pull Bhg merge。或者去 B 做hg pull A & hg merge。这与拥有一个已经存在两个头的单一存储库是不同的问题/场景。
  • @Marcus - 拉取完成后没有区别,您可以在合并前更新到 A5 或 B4。

标签: mercurial merge


【解决方案1】:

通常合并是对称的,但有一些例外:

  • 如果合并的头来自不同的命名分支,则顺序很重要。合并 修订版将在第一个父级的分支上。
  • Mercurial 1.8.4 开始同样适用于书签,即只有书签
    的第一个父级将前进到合并修订版。
  • 合并修订的父级在日志和差异视图中的顺序不同,但是 没有任何值得注意的实际意义(根据我的经验)。

【讨论】:

  • 也许你知道。我一直假设我应该以最少的更改合并到分支中(即更新到 h1,并合并到 h2,其中 h2 自公共点以来的更改比 h1 少),那真的有必要吗?做“最好的事情”?合并算法的工作量可能会减少还是什么?我不记得我为什么做出这个假设,但从你的回答来看,我越想越觉得我的假设是错误的。不过,这与多个命名分支无关,只是同一个命名分支中的两个头,例如默认分支中的两个头。
  • 有趣的地方。如果我考虑一下,我也倾向于将更改较少的分支合并到具有更多更改的分支中。但是,从技术上讲,我也想不出一个好的理由。也许这种假设是一种误解,它基于如果必须完全手动完成合并将如何进行。
  • 我想我会去 Mercurial 邮件列表上询问,如果我以某种方式得到明确的结果,我会回来发表评论。
  • 根据邮件列表中的@Martin Geisler和Kevin Bullock (selenic.com/pipermail/mercurial/2011-April/037990.html),答案是否定的,合并文件内容没有关系。但是,第一个父级的书签将向前移动,另一个不会(假设父级有书签),并且如果您在命名分支之间合并,新提交将最终在第一个父级的命名分支上(除非手动在你提交之前被覆盖。)阅读回复,确定好信息!
  • 已更新(从 Mercurial 1.8.4 开始,只有第一个父级的书签在合并时移动)。
【解决方案2】:

合并的父级顺序会有所不同,但这只会影响您在查看合并变更集时首先看到的差异。否则,如果您更新到 B4 并合并到 A5 或反之亦然,则没有任何区别。

【讨论】:

    【解决方案3】:

    我不是善变的专家,但在阅读了这个问题和解决方案后,我觉得合并方向可以产生巨大的影响:Backing Out a backwards merge on Mercurial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-26
      • 2017-05-16
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多