管理Mercurial中的发布分支
最近我从SVN转到Mercurial。现在,我想知道如何根据良好实践在Mercurial中实现预期的分支工作流程,希望其他开发人员了解存储库中发生的事情 这是工作流程:管理Mercurial中的发布分支,mercurial,branch,Mercurial,Branch,最近我从SVN转到Mercurial。现在,我想知道如何根据良好实践在Mercurial中实现预期的分支工作流程,希望其他开发人员了解存储库中发生的事情 这是工作流程: 通常我有一个主干/默认分支,在那里可以处理当前的发行版系列。假设是1.x。同时,我使用Branch2.x开发下一个主要版本。此分支中的更改可能是激进的,因此与trunk/default/1.x分支合并在这里没有意义。 一段时间后,2.x上的工作可能会完成,2.0版也会发布。现在我希望2.x分支是新的默认/主干分支,当前的默认/
- 一段时间后,2.x上的工作可能会完成,2.0版也会发布。现在我希望2.x分支是新的默认/主干分支,当前的默认/主干是1.x分支
- 重复这个过程,可能会出现一个新的3.x分支。与之前一样,如果3.0发布,3.x应该成为新的默认分支,而当前的默认分支应该成为2.x分支(再次)
$ hg init
$ echo "hello world" > file1.txt
$ hg ci -A -m "Initial commit of 1.x code"
$ hg up default
$ echo "Minor adjustments specific for 1.x" > file3.txt
$ hg ci -A -m "Minor adjustments"
开始使用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)中做一些工作:
过了一段时间2.0版就准备好了,哎呀!将默认分支设为1.x,将2.x设为默认:
现在创建一个新的分支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”是头):
我不确定的主要问题是,重用分支名称并使用默认的分支名称是否是好的做法
这个问题有很多文字-抱歉-但我想清楚我在做什么。以下是我要做的:
将设为默认值
您的“主线”分支。此分支的提示是代码的“当前发布到公众”版本。关键的错误修复可以直接提交到此分支,并合并到开发分支中
要开始使用2.0版,请创建2.0-dev
分支。将2.0的更改提交到该分支,并将主线(default
)中的关键错误修复合并到该分支中。完成2.0后,将2.0-dev
合并到default
中,并将结果标记为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.
我认为你应该考虑这个问题。p>
我不是git的忠实粉丝,但这种模式对mercurial也非常有用。我听说这种工作流是推荐的工作流,但我不确定如果主线中有一些对devel分支没有意义的更改,它的适用性如何。我想这取决于我如何将最新的主线变更合并到devel分支中。如何处理主线中不需要的更改?是否可以表达类似“从主线合并变更集23和27,但忽略所有其他变更集(或在合并后撤消它们)”?如果要合并23和27并忽略其他变更集,您需要移植扩展:如果要合并所有内容并撤消23和27,您将正常合并,然后
hg backout 23--Merge;hg backout 27——在dev分支上进行merge
。我认为backout
命令最适合我的目的。我已经测试过了,它做了我想做的事情。当只需要进行几次更改就可以退出时,它似乎表现得很好。否则,如果有很多不需要的更改,将使历史图表膨胀,并将意味着大量的手动工作。。但只要不是这样,我对你的建议完全满意:)谢谢!哪种解决方案更好取决于您希望在dev分支中的主线中有多少变更集。如果您希望开发分支中有90%的分支和10%的分支被跳过,那么回退就是最好的选择。如果你想要10%的开发分支和90%的跳过,移植会更好。我很高兴它有帮助。如果您想要一个更加灵活的DVCS分支指南,您可能会喜欢我写的这篇文章:对这个主题提供了一个很好的介绍。
o Branch default (3.x)
|
| o Branch 2.x
\|
| o Branch 1.x
\|
|
.
$ 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.