Mercurial合并存储库作为分支

Mercurial合并存储库作为分支,mercurial,repository,versioning,branching-and-merging,Mercurial,Repository,Versioning,Branching And Merging,我有两个Mercurial存储库,用于同一项目的不同主要修订。后一个版本是对项目的功能,尤其是UI的巨大更改,但是它仍然有许多与前一个版本相同的代码。(简而言之,我将这些版本称为4.6和5.0以及未来的存储库project-4.x和project-5.x;这基本上就是我要处理的。) 当我们更加仔细地考虑存储库的结构,特别是如何处理相关代码时,很明显,我们希望简单地将存储库拉到一起,并使用命名的分支来处理每个存储库中正在进行的工作(人们可以根据需要从中进行分支或书签和合并)。为此,我们决定基本上需

我有两个Mercurial存储库,用于同一项目的不同主要修订。后一个版本是对项目的功能,尤其是UI的巨大更改,但是它仍然有许多与前一个版本相同的代码。(简而言之,我将这些版本称为
4.6
5.0
以及未来的存储库project-4.xproject-5.x;这基本上就是我要处理的。)

当我们更加仔细地考虑存储库的结构,特别是如何处理相关代码时,很明显,我们希望简单地将存储库拉到一起,并使用命名的分支来处理每个存储库中正在进行的工作(人们可以根据需要从中进行分支或书签和合并)。为此,我们决定基本上需要将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
问题是,我不知道该怎么做

编辑:见下文;我想出的答案奏效了


脚注
  • 如果您想知道为什么现在才出现这种情况……那么,从
    4.6
    开始,该项目只得到了版本控制。是的,这有点疯狂。我以前从未负责过像这样的重大版本更改,所以我最初决定完全进行一次新的回购,现在我当然后悔了。生活和学习
  • 我已经读过关于这个主题的答案(但这让我不确定如何准确地做到这一点):

  • 我原本以为我需要一些方法来拉进树枝,但在细细咀嚼之后,我总结出最好的方法大致如下:

  • 创建所需的新分支结构(即创建
    4.6
    5.0
    分支)
  • 将旧的
    default
    分支删除到基本存储库中的
    4.6
    分支中
  • project-5.x存储库拉入project-4.x存储库
  • 将合并过程中拉入的
    默认
    (或者对于此存储库,
    实验
    )基线合并到
    5.0
    分支中,同时关闭
    实验
    分支
  • 限制对旧存储库的中央推/拉位置的写访问;由于历史原因,我们仍然拥有它,但人们不能意外地推动它
  • 准备(步骤1-2) 这进行得非常顺利,没有任何合并冲突(除了我需要解决
    .hgignore
    文件中的一些小差异)

    $ 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"
    
    $ 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"