【发布时间】:2010-11-27 04:43:08
【问题描述】:
最近我从 SVN 切换到 Mercurial。现在我想知道如何根据良好实践在 Mercurial 中实现我预期的分支工作流程,希望其他开发人员了解存储库中发生的情况。
这是工作流程:
- 通常我有一个主干/默认分支,用于当前版本系列的工作。假设这是 1.x。同时,我使用一个分支 2.x 来开发下一个主要版本。此分支中的更改可能是激进的,因此与trunk/default/1.x 分支合并在这里没有意义。
- 一段时间后,2.x 的工作可能会完成,2.0 版将发布。现在我希望 2.x 分支成为新的默认/主干分支,当前默认/主干成为 1.x 分支。
- 重复这个过程,可能会出现一个新的 3.x 分支。和以前一样,如果 3.0 发布,3.x 应该成为新的默认分支,而当前默认应该成为 2.x 分支(再次)。
我的问题是不是这个工作流程是否是一个好的工作流程(我想这不是根本错误)。我的问题是,我在 Mercurial 中实现这一点的方式是否可以被视为良好做法,或者是否有更好的机会。
这就是我计划在 Mercurial 中管理分支机构的方式...
从具有单个分支的存储库开始,该分支包含当前版本系列 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!使 default 分支到 1.x 和 2.x 到 default:
$ 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 并在其中工作,也可以在 default 上工作。同样,在 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"
现在的 repo 可能看起来像这样('o' 是头像):
o Branch default (3.x)
|
| o Branch 2.x
\|
| o Branch 1.x
\|
|
.
我不确定的要点是重用分支名称和使用分支名称默认是否是好的做法。
这个问题有很多文字 - 抱歉 - 但我想清楚我在做什么。
【问题讨论】:
-
Mercurial wiki 很好地介绍了这个主题。