GitFlow:首先合并为master还是在prod发布之后?

sme*_*eeb 14 git github git-flow

学习GitFlow和我有一些问题,我在任何我读过的文档/文章中都看不到这些问题.

在某些时候,develop需要将分支上的代码部署到QA /暂存环境并进行严格测试.因此,使用GitFlow,您可以删除release分支develop,然后部署release到所述分段环境.

首先,只是想快速澄清一些事情:第一次特定的项目/回购经历这个过程,你实际上是在分配/创建这个新的release分支develop,吗?而且,在未来的其他所有时间,你只是合并 developrelease,是的

那么QA测试releasestaging env上的分支,看起来都很好,我们已准备好部署到prod.你呢:

  • 部署到prod 然后合并releasemaster?; 要么
  • 合并releasemaster部署督促?

我问,因为在前一种情况下你需要release分支部署到prod,然后部署到prod,然后合并到master.这听起来还不错,但是prod和非prod环境通常并不完全相同,而且在praging服务器上激活的第二个代码在staging chokes中运行得非常好.我知道GitFlow支持修补程序分支的概念,但它们保留用于小修复.在需要回滚/撤销释放的复杂修复的情况下,我们现在将"脏代码"(由于某种原因破坏prod的代码)合并到其中master.

在后一种情况下,可能需要数小时甚至数天(特别是如果您需要让IT/Ops参与prod部署)从您合并并放入prod释放请求开始,到prod部署实际发生的时间.在这段时间里,你有一个master分支,上面写着"特征X,Y和Z都在生产中",但它们实际上并非如此.

我想知道GitFlow是否真的以某种方式解决了这个问题,或者两种情况下的已知解决方法是什么.

Lui*_*uis 11

我工作的项目非常混乱,决策在几分钟内就会发生变化,因此我的策略是尽可能地拖延软件配置管理决策.

特别是,合并到主人:我们只是在我们部署生产后合并为主人,我们有一个确认电子邮件,烟雾测试工作正常.通过这种方式,我们可以通过管理决策变更风险,部署中的回滚,技术问题或任何可能发生的问题来应对混乱.

一开始我们在投入生产之前合并为大师,但技术问题,回滚,管理决策在最后一分钟......给我们带来了很多问题,所以我们改变了策略,并且它在过去的3个工作正常年份.

如果最终在生产后发现了一些回归,那就是一个修补程序,必须像那样处理:)

  • 这种方法的问题在于,合并到master和tag之后,post-merge标签实际上指向与您用于部署的提交不同的提交。这破坏了可重复的构建。 (2认同)
  • 那么,你可以标记绿色提交。我不认为这样做有什么大不了的。最后,Git 不关心分支,而是关心图,所以我们处理的是提交图。如果这里重要的是标记在生产中部署的更改,您可以只标记发送到生产的提交,无论分支如何。完成后,此提交可以合并到 master 中,其余的开发将 master 合并到它们的分支中。 (2认同)

r3g*_*0hn 6

你实际上会从开发分叉/创建这个新的发布分支,是吗?

那是正确的。第一次你唯一的选择是release从你的主分支创建分支,这就是你将要部署的 QA/Staging,然后是生产。

并且在未来的所有其他时间,您只是将开发合并到发布,是吗?

这取决于。根据 Git Flow 的描述,release 分支是一个短暂的分支。它可以从developonly分支出来,并合并到master. 理论上,release应该develop在你的发布完成后合并回,然后再被移除。您应该合并到发布中的唯一内容是hotfix. 这是一篇关于流程的好文章

这因一支球队而异。我曾在完全遵循 GitFlow 描述的团队中工作,而其他人则选择release从开发中删除并重新创建它,就好像这是第一次一样。

部署到 prod,然后将 release 合并到 master 中?;或合并发布到主然后部署到生产?

从理论上讲,master 应该始终包含生产就绪代码,而确保这一点的唯一方法是部署到生产的内容正是master 分支中的内容。也就是说,我们可能无法为提供特别适合团队的完美答案。

例如,我目前在一个拥有 CI/CD 管道的团队工作,这让我们别无选择,只能先合并:部署从master. 我见过一些团队发布的版本相距太远,并且对部署release分支并随后合并更有信心。这避免了部署在release->master合并期间出现的人为错误(这可能包括随着时间的推移建立的令人讨厌的冲突)。

我相信您应该选择最适合您的解决方案,因为 GitFlow 可能无法涵盖所有​​可能的场景和上下文。


Gar*_*ark 5

您创建的发行分支是短暂的分支,类似于您创建的功能分支。发布完成后,删除分支。例如,我将创建一个release/0.1.0分支,进行工作,然后合并。

部署到生产环境时,我总是从master分支中获取代码,这意味着我在部署之前首先将release分支合并到master中。

GitFlow更多地是关于前进,而不是前进。因此,为什么使用修补程序来为已确定的问题创建修补程序。

就投入生产所需的时间而言,这确实不是GitFlow的问题,而且我认为它不会在这方面提供太多帮助。无论您使用哪种分支策略,这对您来说都是一个问题。

  • 在部署之前进行合并的一个巨大优势是,几乎不可能错过最近合并回主数据库的任何错误修复(如果有的话),从而造成回归事件。因此,我认为这是最好的方法。 (2认同)