我有两个 Mercurial 存储库,用于同一项目的不同主要修订。后一个版本是massive更改了项目的功能,尤其是 UI,但它仍然具有许多与早期版本相同的代码。 (为了方便起见,我将这些版本称为4.6
and 5.0
和存储库项目-4.x and 项目-5.x向前走;这基本上就是我正在处理的问题。)[1]
当我们更仔细地考虑存储库的结构,并特别考虑如何处理相关代码时,很明显,我们希望简单地将存储库放在一起,并使用命名分支来进行每个存储库中正在进行的工作(人们可以从中分支或书签并根据需要合并)。为此,我们决定基本上需要拉动项目-5.x存储库到项目-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
问题是我不是exactly确定如何去做。
Edit:见下文;我设计的答案有效。
脚注
- 如果您想知道为什么现在才出现这个问题……好吧,该项目从开始时才得到版本控制
4.6
。是的,这有点疯狂。而且我以前从未负责过这样的重大版本更改,所以我最初决定完全创建一个新的存储库,我现在当然后悔了。活到老,学到老。
- Answers I've already read on the subject (but which left me unsure how to do this exactly):
- Mercurial - 合并分支 https://stackoverflow.com/questions/5186976/mercurial-merging-branches
- 如何将两个 Mercurial 存储库合并为一个存储库 https://stackoverflow.com/questions/10014012/how-do-i-merge-two-mercurial-repos-into-a-single-one
- 如何将一个 Mercurial 存储库(包括历史记录)作为子目录导入另一个 Mercurial 存储库,而不使用子存储库? https://stackoverflow.com/questions/3214717/how-can-i-import-a-mercurial-repo-including-history-into-another-mercurial-rep
我原本以为我需要某种方法来拉入分支,但在仔细研究之后,我得出结论,执行此操作的最佳方法大致如下:
- 创建所需的新分支结构(即创建
4.6
and 5.0
分支机构)。
- 删除旧的
default
分支进入4.6
基础存储库中的分支。
- 拉项目-5.x存储库到项目-4.x存储库。
- 合并
default
(或者在这个存储库的情况下,experimental
)基线,在合并过程中被拉入5.0
分支,关闭experimental
沿途分支。
- 限制对旧存储库的中央推/拉位置的写入访问;由于历史原因,我们仍然保留着它,但人们不能无意中推动它。
准备(步骤 1-2)
$ 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"
此时,存储库已设置完毕:它具有新的基线分支并删除了旧的分支default
我们想要摆脱的分支。
之后,我进行了更改,以使存储库结构看起来更像 5.0 分支所需的方式项目-4.x存储库(因为大规模重组是版本更改工作的一部分)。
存储库合并(步骤 3-4)
下一步实际上是将存储库合并在一起,并将旧存储库中的内容推送到所需的分支中。
$ 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"
这一切进展顺利,没有任何合并冲突(除了我需要解决我的一些小差异).hgignore
file).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)