我们正在尝试将 git-flow 模型应用于 maven 项目。
我们使用develop
andfeature/XXX
分支来处理-SNAPSHOT
版本化的工件,这些工件部署在我们的DEV
andTST
环境中。
当应用程序“准备好”时,我们有“发布候选”:代码被推送到release
分支上,我们编辑 pom 以更新版本(替换-SNAPSHOT
by -RC1
),这个版本被构建并存储在存储库管理器中,然后部署在我们的UAT
环境中。
如果需要一些修复,我们-RCx
会在同一个release
分支中创建其他版本,这些工件被归档在存储库管理器中,并部署在UAT
env 中。因此我们可以精确跟踪不同版本中的错误修复。
一旦-RCx
版本被批准,release
分支就会被推送到master
,更新 pom 以删除-RCx
,构建并存储在存储库管理器中,然后再部署到PROD
env 中。
但是通过这种处理方式,部署在其中的二进制文件PROD
并不UAT
完全相同:由于<version>
标签,POM 在 2 个 WAR 中是不同的。这并不是一个真正的好习惯。
如果我正确理解了 git-flow 模型,“最终”版本号(不带-RCx
)应该在创建release
分支时设置,并且相同版本是“活动的”,直到该分支被推送到master
,对吧?在这种情况下:
- 我们丢失了应用程序实际部署在哪个版本的信息
UAT
(因为我们丢失了-RCx
标识符,我们可能不知道部署的版本是否包含最后的错误修复,或者它是否是部署的旧版本......) - 在存储库管理器中,我们无法知道是从
release
分支还是从构建工件master
,因为在将feature
分支推送到master
.
什么是更好的 ?这两种做法的优缺点是什么?(不同 envs 上的二进制文件不同 -vs- 没有明确的候选版本。)
您(或您将如何)在 git-flow 模型中使用 Maven 项目管理候选版本?