在Mercurial中pipe理发布分支

最近我从SVN切换到Mercurial。 现在我想知道如何根据好的实践来实现Mercurial中我想要的分支工作stream程,希望其他开发人员能够理解存储库中会发生什么。

这是工作stream程:

  1. 通常我有一个中继/默认分支,在当前版本系列的工作发生。 假设这是1.x. 同时我使用一个分支2.x在下一个主要版本上工作。 这个分支的变化可能是激进的,所以与trunk / default / 1.x分支合并在这里是没有意义的。
    • 一段时间后,2.x版本可能会完成,版本2.0获得释放。 现在我希望2.x分支是新的默认/中继分支,当前的默认/中继是1.x分支。
    • 重复这个过程,可能会出现一个新的3.x分支。 和以前一样,如果3.0被释放,3.x应该成为新的默认分支,而当前的默认应该成为2.x分支(再次)。

我的问题不是这个工作stream程是否是一个好的(我想这不是根本错误的)。 我的问题是,我在Mercurial中意识到这一点的方式是否可以被看作是好的做法,或者是否有更好的机会。

所以这里是我如何计划在Mercurial中pipe理分支机构…

从具有包含当前版本系列1.x的代码的单个分支的存储库开始:

$ hg init $ echo "hello world" > file1.txt $ hg ci -A -m "Initial commit of 1.x code" 

开始在2.x版本上工作:

 $ hg branch 2.x $ hg ci -m "Create new branch for 2.x development" $ echo "Big new feature for 2.x" > file2.txt $ hg ci -A -m "Add big new feature" 

同时,在当前发行系列(1.x)中做一些工作:

 $ hg up default $ echo "Minor adjustments specific for 1.x" > file3.txt $ hg ci -A -m "Minor adjustments" 

一段时间2.0版发布之后,yippee! 使默认分支到1.x2.x 默认

 $ hg up default $ hg branch 1.x $ hg ci -m "Make default branch to 1.x branch" $ hg up 2.x $ hg ci --close-branch -m "Close branch 2.x" $ hg branch --force default $ hg ci -m "Make former 2.x branch to new default" 

现在创build一个新的分支3.x并在其中工作,也默认工作。 再次,在一段时间3.0准备就绪之后,又要pipe理分支名称了:

 $ hg up default $ hg branch --force 2.x # (reuse previously closed 2.x branch name) $ hg ci -m "Make default branch to 2.x branch" $ hg up 3.x $ hg ci --close-branch -m "Close branch 3.x" $ hg branch --force default $ hg ci -m "Make former 3.x branch to new default" 

回购现在可能看起来像这样('o'是头部):

 o Branch default (3.x) | | o Branch 2.x \| | o Branch 1.x \| | . 

我不确定的重点是如果重复使用分支名称和与分支名称杂耍默认是很好的做法。

很多这个问题的文本 – 抱歉 – 但我想清楚我在做什么。

这是我会做的:

default你的“主线”分支。 这个分支的提示是你的代码的“当前向公众发布”版本。 关键的错误修正可以直接提交给这个分支并合并到开发分支中。

要开始2.0版本的工作,build立一个2.0-dev分支。 将2.0的更改提交到该分支,并将主线( default )中的关键错误修正合并到该分支中。 完成2.0后,将2.0-dev合并为default ,并将结果标记为2.0

这样做的事情意味着你不必担心杂耍分支的名字,你可以很容易地将关键的错误修正合并到mainline到开发分支。

当你一次处理多个未来版本时(比如2.1和3.0),它也可以很好地扩展。 您可以定期将2.1更改合并到3.0以保持3.0当前。

你最终会得到一个这样的图表:

 $ hg glog -l 1000 @ changeset: 25:efc0096f47c0 tip | summary: Added tag 3.0 for changeset d1a7fc3d7d77 | o changeset: 24:d1a7fc3d7d77 3.0 |\ summary: Merge in the redesign changes. | | | o changeset: 23:b5b69d24c8f7 3.0-dev | | summary: Finish 3.0 redesign. | | | o changeset: 22:4c2f98fac54b 3.0-dev |/| summary: Merge in the latest changes to 2.1/mainline. | | o | changeset: 21:37df04521032 | | summary: Added tag 2.1 for changeset 39ecc520fc0a | | o | changeset: 20:39ecc520fc0a 2.1 |\ \ summary: 2.1 development is done. | | | | o | changeset: 19:208f3f9236af 2.1-dev | | | summary: Finish the 2.1 work. | | | | | o changeset: 18:4a024009a9d6 3.0-dev | | | summary: More redesign work. | | | | | o changeset: 17:00c416888c25 3.0-dev | |/| summary: Merge in changes from the 2.1 branch to keep the redesign current. | | | | o | changeset: 16:a57e781a0db1 2.1-dev | | | summary: More 2.1 work. | | | | | o changeset: 15:ddeb65402a61 3.0-dev | | | summary: More redesign work. | | | +---o changeset: 14:90f5d7a8af9a 3.0-dev | | | summary: Merge in the fire fixes. | | | | o | changeset: 13:78a949b67bb9 2.1-dev |/| | summary: Merge in the fire fixes. | | | o | | changeset: 12:6dfe9d856202 | | | summary: Oh no everything is on fire, fix it in the mainline. | | | | o | changeset: 11:86767671dcdb 2.1-dev | | | summary: Smaller changes for 2.1. | | | | | o changeset: 10:25dec81d2546 3.0-dev | | | summary: Work more on the redesign. | | | +---o changeset: 9:42c7d689fb24 3.0-dev | | summary: Start working on a complete redesign. | | | o changeset: 8:3da99186ca7d 2.1-dev |/ summary: Start working on 2.1. | o changeset: 7:9ba79361827d | summary: Added tag 2.0 for changeset 755ed5c5e291 | o changeset: 6:755ed5c5e291 2.0 |\ summary: Merge in the dev branch for 2.0. | | | o changeset: 5:44a833fcc838 2.0-dev | | summary: Finish work on 2.0. | | | o changeset: 4:d7ba6aae1651 2.0-dev |/| summary: Merge in the critical fix. | | o | changeset: 3:968049f1b33a | | summary: Fix a critical bug on the main branch. | | | o changeset: 2:917869609b25 2.0-dev | | summary: More work on the new version. | | | o changeset: 1:f95798b9cb2e 2.0-dev |/ summary: Start working on version 2.0. | o changeset: 0:8a3fb044d3f4 summary: Initial commit. 

我想你应该考虑这个: 一个成功的git分支模型 。

我不是git的忠实粉丝,但是这个模型对于mercurial来说也是非常有用的。