我们最近改用了Mercurial。看完这段有用的视频后: http://www.youtube.com/watch?v=-k2vLKOUb8s&noredirect=1
我正在尝试实现允许以下内容的发布过程: - maven发布独立于正在进行的开发工作 - 补丁发布版本,然后将修复程序推送回dev
到目前为止,我已经想出了这个:
这允许我们在dev repo上继续开发的同时对稳定的仓库进行释放。
我遇到的问题是使用maven发布插件。如果我发布1.0.0-SNAPSHOT,我最终会在稳定的回购中得到以下结果: 1.0.0-SNAPSHOT-> 1.0.0-> 1.1.0-SNAPSHOT
现在我可以将其推回到dev repo并继续开发1.1.0-SNAPSHOT。到目前为止一切都很好。
但是管理1.0.0版本和后续补丁的最佳方法是什么?我应该从1.0.0提交点或另一个克隆创建一个分支吗?是否有其他方法来管理它,以便开发1.0.1修复程序可以轻松应用它并将修复程序推回到dev?
答案 0 :(得分:3)
你的设置听起来不错。我会根据1.0.0版本的变更集创建一个新的long-term named branch。保留development on the default
branch并为每个版本创建分支。
在这里,我在POM的上方和下方写下版本号,并将分支名称一直写到左侧:
1.0.0-SNAPSHOT 1.0.0 1.1.0-SNAPSHOT
default: o --- o --- o --- o ------ o --- o --- o --- o --- o --- o
\ /
1.0.x: o --- o --- o --- o -------- o --- o --- o
1.0.1-SNAPSHOT 1.0.1 1.0.2-SNAPSHOT
因此,您使用default
分支在1.0.0-SNAPSHOT版本上愉快地工作。在发布的时候,插件会在1.0 {0}时立即生成一个变更集,并在default
分支上立即生成另一个变更集1.1.0-SNAPSHOT。
您现在或以后可以分支1.0.x版本 - 无关紧要。当你做分支时
$ hg update 1.0.0 # <- this is a tag
$ hg branch 1.0.x
# edit the POM to change version to 1.0.1-SNAPSHOT
$ hg commit -m "Started 1.0.x branch"
开发人员现在可以随时使用
$ hg update 1.0.x # <- this is a branch
获取该分支上的最新变更集,并hg update default
返回主要开发线。在1.0.x
分支上提交变更集时,您需要将它们合并回default
,以便在那里修复错误:
$ hg update default
$ hg merge 1.0.x
$ hg commit -m "Merge in bugfix-123 from 1.0.x"
现在,您服务器上的一个或两个存储库之间的选择主要是无关。您可以使用命名分支来区分稳定的变更集(它们位于1.0.x
)和不太稳定的变更集(它们位于default
上)。但是,为每个稳定版本在服务器上保留存储库通常很有意义。您可以在Jenkins中设置作业或使用cronjobs来执行
$ cd foo-1.0.x
$ hg pull --branch 1.0.x
定期,以便克隆保持最新。你也可以在主dev开发中创建一些changegroup
钩子:
[hooks]
changegroup.1.0.x = hg push --branch 1.0.x ../foo-1.0.x
changegroup.1.1.x = hg push --branch 1.1.x ../foo-1.1.x
开发人员必须等到钩子完成,但是当你在本地存储库之间推送时它应该很快。如果这是一个问题,请使用异步同步机制(Jenkins,cronjob,...)。
答案 1 :(得分:0)
从publication workflow的角度来看,最好在专用分支中isolate any hotfix(可以从repo到repo推送)或repo(如果你想避免'命名分支')。