在水银管理发布分支(Managing release branches in Mercurial)

2019-07-17 15:22发布

近日笔者从切换到SVN水银。 现在我不知道如何实现水银根据良好实践我的意图分支工作流程,希望其他开发人员了解在仓库中发生了什么。

这是工作流程:

  1. 通常我有一个主干/ default分支,其中对当前版本一系列的工作情况。 比方说,为1.x的 同时,我用一个分支2.x到的下一个主要版本工作。 在该分支的变化可能是激进的,所以与躯干/默认/ 1.x的分支合并在这里是没有意义的。
    • 后2.x的一段时间的工作,可以完成,2.0版得到释放。 现在我想在2.x分支成为新的默认/树干分支和当前的默认/树干是1.x的分支。
    • 重复这个过程中,有可能出现一个新的分支3.X。 如前所述,如果3.0得到释放,3.X应该成为新的默认分支,而当时的默认应该成为2.x的分支(再次)。

我的问题是这样的工作流程而不是是否是一个很好的(我想这不是根本上的错误)。 我的问题是我在水银认识到这一点的方式是否可以被看作是很好的做法,或者有更好的机会。

因此,这里是我如何计划在水银来管理分行...

从保持当前版本的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"

现在创建一个新的分支3.x和在它的工作,在默认情况下也行。 同样,一段时间后3.0已准备就绪,再次是时候来管理分支名称:

$ 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
   \|
    |
    .

最主要的一点我不知道的是,如果重复使用分支名称和杂耍与分支的名称默认是很好的做法。

大量的文字对那个问题的 - 对不起 - 但我想清楚我在做什么。

Answer 1:

这是我会怎么做:

default你的“主线”分支。 这个分支的尖端是“目前向公众发布”你的代码的版本。 关键缺陷可以直接致力于这一分支合并到开发分支。

要开始对2.0版本的工作,做一个2.0-dev分支。 提交2.0到分支的更改,并从主线(关键缺陷合并default )到它。 一旦你有2.0完成,合并2.0-devdefault并标记结果作为2.0

这样做,让意味着你不必担心杂耍分支名称,你可以很容易地关键缺陷的主线合并到开发分支。

这也很好地进行扩展,当你在将来的多个版本的同时(比如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.


Answer 2:

我想你应该考虑一下: 一个全成的Git分支模型 。

我不是混蛋的大风扇,但这种模式是额外有用的善变了。



文章来源: Managing release branches in Mercurial