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