使用git flow发布时,如何更新pom.xml中的版本?

时间:2015-03-27 13:27:58

标签: git maven versioning git-flow

在maven项目中,项目的版本包含在pom.xml文件的<version> attritbute中。在git flow模型中创建新版本时,我需要修改版本号。 This article解释了这是如何完成的(没有maven):

  1. 创建发布分支
  2. 更改版本号并提交
  3. 合并发布分支以开发和掌握
  4. 另外它说:

      

    正是在发布分支的开始,即将发布的版本被分配了版本号 - 而不是之前的版本号。直到那一刻,开发分支反映了“下一个版本”的变化,但不清楚“下一个版本”最终是否会变为0.3或1.0,直到发布分支开始。该决定是在发布分支的开始时做出的,并且由项目关于版本号冲突的规则执行。

    我在这里看到了与maven结合的两个问题:

    1. maven正在开发的版本将是[下一个版本] -SNAPSHOT。因此,在我们创建发布分支的那一刻,我们无法推迟决定下一个版本。当然,如果我们可以稍后改变主意,但我们已经需要在此处输入/某些值/。
    2. 在创建我们的版本之前,pom.xml中的版本就是说1.1-SNAPSHOT。现在我们已将其更改为发布分支上的1.1,并将其合并到master。精细。但我们也应该将该分支合并回来进行开发,为此我们需要将版本调整为例如1.2-SNAPSHOT。也许我们不应该在发布分支上做到这一点,因为该提交不应该是发布的一部分。实际上,我们可能应该在分支开发之后立即进行此更改,因为所有未来的开发提交都将用于下一个版本。
    3. 当谷歌搜索问题时,我发现了一些关于maven-plugins的文章可以自动化这个过程,这可能很有意思,但这个问题实际上是关于git图应该是什么样子以及版本提交应该在哪里而不是我如何使用maven-plugin自动执行此操作。

4 个答案:

答案 0 :(得分:4)

对于正常版本,只需在合并发布分支后执行快照版本:

  1. develop关闭创建发布分支并从版本
  2. 中删除快照
  3. 将其合并到master
  4. 将其合并到develop
  5. develop上的版本更改为下一个快照版本
  6. 推送masterdevelop
  7. 当您同时推送所有更改时,团队只会看到快照版本增加。

    对于修补程序,当您从master分支创建它时,这是不可能的。此方案有一个解决方法,这是使用raw git命令的示例。

    示例:1.0.0上有master,并且想要创建1.0.1修补程序版本。您的开发时间已在1.1.0-SNAPSHOT

    1. git checkout master
    2. git checkout -b hotfix/1.0.1
    3. 制作修补程序!
    4. mvn versions:set -DnewVersion=1.0.1
    5. git commit -a -m "hotfix release 1.0.1"
    6. git checkout master
    7. git merge hotfix/1.0.1(很简单,因为我们创建了分支master
    8. git checkout develop
    9. mvn versions:set -DnewVersion=1.0.0
    10. git commit -a -m "workaround to avoid merge conflicts"
    11. git merge hotfix/1.0.1(因为之前的提交会有效)
    12. mvn versions:set -DnewVersion=1.1.0-SNAPSHOT
    13. git commit -a -m "set version back to 1.1.0-snapshot"
    14. 不是很好但是有效。 jgitflow(Maven插件使用git flow支持你)也使用此解决方案

答案 1 :(得分:3)

请记住,Git是为Linux内核开发的,它具有自己的版本规则。

对于Maven,您应该创建一个发布分支,它获取下一个版本的快照版本。此更改应该是单个提交(即只更改pom.xml中的版本号)。合并时,请结帐master并使用git merge --strategy=ours <release-branch>

--strategy=ours表示:通过说&#34来进行合并; master中的所有内容都已与发布分支正确合并&#34 ;;没有改变掌握。之后,尽管两个分支中的版本号不同,但Git会将分支视为合并(即没有变化)。

为避免在使用Maven构建master时出现各种问题,请使用奇怪或非常高的版本号,该版本号永远不会像99.DEV-SNAPSHOT那样更改。

进行发布时,从发布分支中的版本中剥离-SNAPSHOT并提交。然后,您结帐主人并再次与--strategy=ours合并。

注意:如果您这样做,则不得在发布分支上进行任何其他更改,而是更改版本。任何其他修补程序将丢失!你只能挑选它们。

答案 2 :(得分:1)

答案 3 :(得分:0)

使用Maven,您应该手动更改版本号。

您应该将“scm”信息添加到您的pom中,以便让Maven提交并直接推送版本更改。

然后,使用“发布插件”。它会为你做的工作。假设您当前的版本是“1.1-SNAPSHOT”,“release:perform”maven任务将:

  • 将版本更改为1.1,提交,标记此版本并推送它。
  • 再次将版本更改为1.2-SNAPSHOT(或1.1.1-SNAPSHOT,2.0-SNAPSHOT ...您可以选择下一个版本),提交并推送它。

以下是使用Maven发布插件的项目的git历史记录摘录:

* 2345678 - Normal developpement commit (on branch 1.2-SNAPHOT).
* 5678901 - [maven-release-plugin] prepare for next development iteration
* 8901234 - (tag: 1.1) [maven-release-plugin] prepare release 1.1
* 1234567 - Normal developpement commit (on branch 1.1-SNAPHOT).

注1:在发布时,您必须配置下一个版本(本例中为1.2)。如果您改变主意,可以稍后更改。 Maven“version:set-version”插件允许您重新分配所有项目层次结构的版本。您只需在下一个版本之前提交此版本更改。

注意2:在发布时,您还可以更改发布版本。即使当前版本是1.1-SNAPSHOT,您也可以决定该版本是2.0版本,下一个版本是2.1-SNAPSHOT。