使用hg合并3个相关的回购

时间:2015-08-10 23:52:13

标签: merge mercurial

我正在尝试使用mercurial将3个repos合并为一个。 Repo A是我想将Repo B和C合并成的。这些是AS3项目,A依赖于B和C的文件。

我尝试按照这篇文章中的步骤操作: Merging two different repositories

但是,我认为这取决于回购不分享任何东西的事实。在我的情况下,因为项目具有相同的文件结构,它似乎只是覆盖前一个(例如:两个都有/ images文件夹)。

任何建议?

1 个答案:

答案 0 :(得分:1)

让我们确保我们完全理解我们的目标:

我们希望保留所有三个项目的所有文件。如果相同的文件名出现在多个存储库中,我们想要做什么?

  • 保留A(或B或C)版本:我们可以根据需要使用--tool internal:localinternal:other执行合并。 Local保留了我们当前拥有的版本,其他版本保留了我们合并的版本。
  • 使用Mercurial的标准三向合并逻辑将它们合并在一起(由于我们没有共同的祖先,因此不能很好地工作):--tool internal:merge或者根本不指定选项。这可能会产生丑陋的合并冲突,我们将不得不解决这个问题。
  • 这不可能(不应该)首先发生:--tool internal:fail在这种情况下会抛出错误而不会尝试合并文件。

所以,这是修改后的程序:

$ hg init combined
$ cd combined
$ hg pull ../A
$ hg update
$ hg pull ../B --force
$ hg merge --tool something # see above
$ # Manually fix up any files that throw merge conflicts
$ hg resolve --all -m  # Mark all files as resolved, only if there were conflicts
$ hg commit -m "Merge A and B"
$ hg pull ../C --force
$ hg merge --tool something # see above
$ # Fix conflicts
$ hg resolve --all -m  # Only if there were conflicts
$ hg commit -m "Merge A+B and C"