2012-02-02 39 views
4

我们最近已切换到Mercurial。看这个有用的视频后: http://www.youtube.com/watch?v=-k2vLKOUb8s&noredirect=1Maven Mercurial发布流程

我想实现一个释放的过程,允许以下内容: - 行家释放是独立的持续开发工作 - 补丁发布的版本,然后按修复回dev的

到目前为止,我想出了这一点: Repo Arch

这让我们这样做对稳定回购释放,同时继续开发dev的回购。

我遇到的问题是使用maven release插件。如果我释放1.0.0-SNAPSHOT,我会在稳定的回购中得到以下结果: 1.0.0-SNAPSHOT-> 1.0.0-> 1.1.0-SNAPSHOT

现在我可以推回到开发者回购和开发将在1.1.0-SNAPSHOT上继续。到现在为止还挺好。

但是,管理1.0.0版本和后续补丁的最佳方法是什么?我应该从1.0.0提交点还是另一个克隆创建一个分支?有没有其他的方式来管理它,因此开发一个1.0.1修补程序的开发人员可以轻松应用它,并将修复推回到开发中?

回答

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 

所以,你愿意就版本1.0.0-SNAPSHOT使用default工作科。当发布时,该插件使用1.0.0创建变更集,并立即使用1.1.0-SNAPSHOT创建另一个变更集,全部在default分支上。

现在或以后可以为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中设置作业或使用cronjob执行

$ cd foo-1.0.x 
$ hg pull --branch 1.0.x 

定期更新,以便克隆保持最新状态。你也可以在你的主要开发一些回购挂钩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,...)。