在maven项目中,项目的版本包含在pom.xml文件的<version>
attritbute中。在git flow模型中创建新版本时,我需要修改版本号。 This article解释了这是如何完成的(没有maven):
另外它说:
正是在发布分支的开始,即将发布的版本被分配了版本号 - 而不是之前的版本号。直到那一刻,开发分支反映了“下一个版本”的变化,但不清楚“下一个版本”最终是否会变为0.3或1.0,直到发布分支开始。该决定是在发布分支的开始时做出的,并且由项目关于版本号冲突的规则执行。
我在这里看到了与maven结合的两个问题:
1.1-SNAPSHOT
。现在我们已将其更改为发布分支上的1.1
,并将其合并到master。精细。但我们也应该将该分支合并回来进行开发,为此我们需要将版本调整为例如1.2-SNAPSHOT
。也许我们不应该在发布分支上做到这一点,因为该提交不应该是发布的一部分。实际上,我们可能应该在分支开发之后立即进行此更改,因为所有未来的开发提交都将用于下一个版本。当谷歌搜索问题时,我发现了一些关于maven-plugins的文章可以自动化这个过程,这可能很有意思,但这个问题实际上是关于git图应该是什么样子以及版本提交应该在哪里而不是我如何使用maven-plugin自动执行此操作。
答案 0 :(得分:4)
对于正常版本,只需在合并发布分支后执行快照版本:
develop
关闭创建发布分支并从版本master
develop
develop
上的版本更改为下一个快照版本master
和develop
当您同时推送所有更改时,团队只会看到快照版本增加。
对于修补程序,当您从master
分支创建它时,这是不可能的。此方案有一个解决方法,这是使用raw git命令的示例。
示例:1.0.0
上有master
,并且想要创建1.0.1
修补程序版本。您的开发时间已在1.1.0-SNAPSHOT
。
git checkout master
git checkout -b hotfix/1.0.1
mvn versions:set -DnewVersion=1.0.1
git commit -a -m "hotfix release 1.0.1"
git checkout master
git merge hotfix/1.0.1
(很简单,因为我们创建了分支master
)git checkout develop
mvn versions:set -DnewVersion=1.0.0
强> git commit -a -m "workaround to avoid merge conflicts"
强> git merge hotfix/1.0.1
(因为之前的提交会有效)mvn versions:set -DnewVersion=1.1.0-SNAPSHOT
强> git commit -a -m "set version back to 1.1.0-snapshot"
强> 不是很好但是有效。 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任务将:
以下是使用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。