【发布时间】:2017-11-18 16:57:12
【问题描述】:
Git Flow 已经存在了很长时间,而且似乎很多人都将它用作他们最喜欢的 git 工作流程。
当谈到在 Java / Maven 设置中实现 Git Flow 时,我想知道应该如何对下面所有分支上的软件模块进行版本控制。
在一个简单的 Maven 世界中,
- 开发人员始终使用 SNAPSHOT 版本(例如:0.0.1-SNAPSHOT)
- 一些发布过程创建一个发布 (0.0.1)
- 新的快照版本可供开发人员在 (0.0.2-SNAPSHOT) 上进行开发。
如果你只有一个 Develop 和 Master 分支,这没问题,但是你如何在 GitFlow 中处理 maven 版本控制。
master 上的版本很容易定义,因为它们将是最终从 Release 分支创建和发布的版本。
但是,一旦代码进入发布分支,您会在此处部署什么版本控制策略?
- 我想我们需要在发布分支上保留一个新的版本号以避免与 Develop 冲突?该版本号将如何与开发分支上的任何内容相关联。
- 我假设在发布分支上也可以在发布投入生产之前进行多次提交。由于我们不能重复使用非快照版本,我们是在每次提交时增加固定版本,还是在最终确定并推送到 master 之前使用发布快照版本?
- 当我们将更改从发布分支合并回开发分支时,我们是否会启动新的快照版本?
【问题讨论】:
-
Maven 看待发布版本的方式早于 git 及其思维方式。使用 git,提交 is 的 sha1-key 版本在您不知道提交时哪个提交将在生产中运行的设置中特别有用。如果您将整个项目放在一个 git 存储库中,那么让 maven 仅使用快照并使用 git commit id 作为您使用的版本。
-
“人们似乎将其用作他们最喜欢的 git 工作流程”——这并不是因为它很好。但是因为人们不太了解 CI 和现代开发流程,如 CD、JIT、ToC。 GitFlow 是一种非常过时的分支思考方式。有很多更好的选择,今天最著名的方法是基于主干的开发。尽管对于某些团队来说它可能太先进了。在这些团队中,您可能希望从简单的 FeatreBranch->master 方法开始。
-
@StanislavBashkyrtsev 是的,但是那些仍然每 2 个月左右发布一次并且仍然需要大量手动测试才能投入生产的团队呢?
-
@JFMeier,稀有版本不会对您使用分支或版本的方式产生太大影响。 可能在后备箱中使用 FeatureBranches 而不是 FeatureToggles 更容易(或者可能不使用 - 它会有所不同),但仅此而已。所以 GitFlow 和复杂的版本控制在稀有版本的情况下也没有任何好处。
-
@StanislavBashkyrtsev 我只是觉得如果你有
release和hotfix分支,在开发过程中修复生产版本或修复测试版上的错误会更容易。如果发布需要数周的手动测试(和错误修复),那么很难只拥有一个主分支而没有其他任何东西。