如何在git中管理POM版本号而不产生合并冲突

4
我不太明白如何使用版本号。在我的团队中,我们的基本工作流程如下所示:在开发环境中进行持续开发。每个月我们会冻结代码,将当前应用程序版本部署到单独的QA环境中,由QA人员测试其稳定性和开发人员可能遗漏的任何错误。一旦QA满意(这需要1到2周,具体取决于QA的工作量),QA版本就会部署到我们的生产服务器上。
我们正在从Subversion转移到Git,并尝试设计支持此过程的分支/发布策略。我想做的是:
起点:DEV运行在主干上的1.0-SNAPSHOT版本 在代码冻结时:从主干创建一个新的release-1.0分支。增加主干上的POM版本到1.1-SNAPSHOT 经过QA后:将版本1.0部署到我们的nexus服务器并对存储库进行标记。将release-1.0合并到主干中,以便将来的版本集成任何错误修复或更改。
问题在于,当我将release-1.0合并到主干时,POM的版本会发生冲突。1.1-SNAPSHOT与1.0冲突。解决合并冲突很简单,但它阻止了我自动化此步骤。
理想情况下,发布分支可以作为维护分支保留,开发版本为1.0.1-SNAPSHOT,但我不希望将该更改集成到主干中。否则,我只需删除发布分支并依靠标记创建任何1.0.1版本的热修复分支,因为这仅用于无法等待下一个发布周期的关键生产问题。
我想避免从发布分支中挑选提交并将其合并到主干中,以消除可能遗漏某些内容而未被合并到主干的可能性。
有没有办法使用maven-release插件来管理此过程,或者我注定要手动完成?

2
但是在其他文件中,您是否总是会遇到合并冲突,需要在每次合并时手动解决呢? - Tim Biegeleisen
同意@TimBiegeleisen的看法,如果您正在将修复程序推送到主分支以修补任何错误,则该文件仍会出现合并冲突。如果这是完全独立的发布,则还可以使用更新的版本来完成它。 - Naman
有这样一件事,就是进行合并并指定 --theirs--ours 来无条件接受一个父版本的内容。但因为您可能除了 POM 之外还有其他文件,盲目地接受每个文件的一个版本而不是另一个版本可能会弃掉重要文件。 - Tim Biegeleisen
我之前尝试过使用自定义合并过滤驱动:https://dev59.com/xmAh5IYBdhLWcg3wBPbY - VonC
1个回答

4
正如Tim所提到的,如果您的项目源代码包含版本号、标签名称和计划发布日期等信息,那么您总会遇到冲突,因为两个分支必须对此进行不同意见。
这在当今的软件项目中很常见。这是Maven的方式,也是Linux的方式,但我认为Linus不会接受内核版本号或代号存在冲突的补丁 - 他们遵循不同于大多数项目的模型。
另一种方法是在源代码中保留一个特殊的“0-SNAPSHOT”(在Maven术语中),并仅在发布时进行修改。然后,所有开发分支都会达成一致,我相信这正是您想要的。
请注意,Maven并没有考虑到这一点,您可能会遇到问题。例如,您如何向QA解释最终版本(1.0)与他们批准的版本(1.0-rc-5)具有不同的SHA1哈希值,只因为您更改了源代码中的数字?
如果您完全从项目源代码中删除版本号,这将不再是一个问题。但很遗憾,我没有找到这是Maven的做法。我们需要更好的工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接