Mercurial合并存储库作为分支

时间:2013-05-07 23:01:18

标签: mercurial repository versioning branching-and-merging

我有两个Mercurial存储库,用于同一项目的不同主要版本。后一版本是对项目功能,尤其是UI的大规模更改,但它仍然会有许多与早期版本相同的常用代码。 (为简写,我会将这些版本4.65.0以及存储库 project-4.x project-5.x 称为;这基本上就是我正在处理的事情。)[1]

当我们更仔细地考虑我们的存储库结构,并特别考虑如何处理相关代码时,很明显我们想简单地将存储库拉到一起并使用命名分支来处理每个存储库中正在进行的工作(来自哪些人可以根据需要分支或书签和合并)。为此,我们决定基本上需要将 project-5.x 存储库拉入 project-4.x 存储库。从我所看到的,组合存储库应该相当简单:

$ hg pull -f project-5.x   # in project-4.x
$ hg merge

到目前为止,这么好。我担心的是处理分支问题。[2]这些将作为两个完全不相关的链(这很好),但我希望分支结构看起来像这样:

---4.6-----   }
  \           } original project-4.x
   5.0-----   }
       /
-------       } original project-5.x

问题是,我不是确切地确定如何做到这一点。

修改:见下文;我设计的答案有效。


脚注

  1. 如果您想知道为什么现在才出现......好吧,该项目仅在启动4.6时受版本控制。哪,是的,有点疯狂。我之前从未负责过像这样的重大版本更改,所以我最初决定完全重新制作一个回购,我当然后悔了。生活和学习。
  2. 答案我已经阅读了这个主题(但这让我不确定如何做到这一点):

1 个答案:

答案 0 :(得分:5)

我原本以为我需要一些方法才能进入分支机构,但在咀嚼了一些之后,我得出结论,最好的方法大致如下:

  1. 创建所需的新分支结构(即创建4.65.0分支)。
  2. 将旧的default分支移除到基础存储库中的4.6分支。
  3. project-5.x 存储库拉入 project-4.x 存储库。
  4. 合并default(或在此存储库的情况下,experimental)基线(在合并期间拉入)到5.0分支,关闭{{1一路上分支。
  5. 限制对旧存储库的中央推/拉位置的写访问权限;我们仍然有历史原因,但人们不能不小心推动它。
  6. 制备(步骤1-2)

    experimental

    此时,存储库已设置:它具有新的基线分支,并删除了我们想要删除的旧$ cd <project-4.x directory> $ hg branch 4.6 $ hg ci -m "New 4.0 baseline" $ hg branch 5.0 $ hg ci -m "New 5.0 baseline" $ hg up default $ hg ci --close-branch -m "Close default branch going forward. $ hg up 4.6 $ hg merge default $ hg ci -m "branch merge default -> 4.6" 分支。

    在此之后,我进行了更改以使存储库结构更像是 project-4.x 存储库中5.0分支所需的方式(因为大规模重组是版本的一部分)改变努力)。

    存储库合并(步骤3-4)

    下一步实际上是将存储库合并在一起,并将内容从旧存储库推送到所需的分支。

    default

    这完美地进行了,没有任何合并冲突(除了我需要解决我的$ hg pull -f <path to project-5.x repository> # still in project-4.x repository $ hg merge -m "Merge in project-5.x repository" $ hg up experimental # experimental is the name of the "default" branch $ hg ci --close-branch -m "Close experimental branch" $ hg up 5.0 $ hg merge experimental $ hg ci -m "Merge old experimental into new 5.0 baseline" 文件中的一些小差异)。