GitFlow:发布分支和主分支有什么区别?

GitFlow: what is difference between release and master branches?

我刚刚看过 this gitflow cheat sheet。我不明白 release 分支。

谁能告诉我 releasemaster 分支之间的区别?

一旦您想要在您的版本中拥有的所有功能都处于开发状态,而不是 "locking" 开发到任何新的提交,您创建 relase 分支,它将包含您下一个版本中预期的所有功能(而不是在 master 中,因为你的整个版本都应该经过测试并且可能会有一些错误修复......)。

  • 在此分支中,您只有错误修复、文档等...但没有新功能
  • 您的开发分支没有锁定,因此下一个版本的新功能仍然可以commited/push开发和测试。
  • 发布分支非常适合部署在 staging/pre-prod 环境中,让 QA 测试您的发布。
  • 一旦发布分支稳定,您可以将其合并到 master 并转到 prod。高手应该永远稳定稳定(如果不是你做hotfix)。

您可以查看这些链接以获得进一步的解释:

https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow http://nvie.com/posts/a-successful-git-branching-model/#feature-branches

区别在于目标和过程。 release 分支通常是在您准备即将发布的版本时创建的。当所有应该发布的 feature 分支已经合并到 develop 分支时,您创建 release 分支离开 develop 分支并仅提交错误修复或一些配置更改给它。换句话说,您尝试使其尽可能稳定。希望 release 分支足够稳定时,将其合并回 developmaster 分支。 master 分支的目的是始终拥有可以部署到生产环境的项目的最新稳定版本。您永远不会直接提交到 master 分支,只能从 releasehotfix 分支合并到它。还可以配置 CI/CD 工具以在 master 分支中的任何更新上部署到生产环境。

release 之后,release 分支将被删除,但 master 将保持稳定。

我认为你的问题来自于我经常看到的对 GitFlow 的误解。所以值得揭穿它。

在 GitFlow 中发布分支是 short-lived。它们用于准备 发布。发布分支的好处是它可以让一个团队完善当前即将发布的版本,而另一个团队继续为后续版本开发功能。相比之下,master 分支永远存在。

在 GitFlow 中,您不是从发布分支发布到生产环境。这不是发布分支的目的。误解大概来自“release branch”这个名字。 master 分支必须反映实际生产值得发布。您将发布分支合并到 master,然后从 master 分支发布(即创建工件)用于生产环境。用于生产环境的工件总是来自 GitFlow 中的 master 分支。您不能在任何其他分支的生产环境中拥有工件。本质上,每次合并到 master 都是 GitFlow 模型中的新官方版本。

一旦发布结束,发布分支就会再次消失(一旦你将它合并到 master),我个人认为从一个很快被删除的分支发布到生产环境中是灾难性的.

以上内容对某些人来说似乎存在争议。但我认为这是 original paper 中描述的经典 GitFlow 思想。您会发现一些人实际上从他们的发布分支创建构建工件,然后将其放入生产环境。当他们看到它有效时,他们也会返回并将其合并到 master。 (否则他们会忘记这一步)。我不认为那是 GitFlow。

部署到生产环境中的工件来自另一个分支而不是 master 的工作流根本不是 GitFlow。对于某些人来说,它可能是一个很好的工作流程,它可能有其优点,但它不是 GitFlow。

简而言之,这是经典的 GitFlow,您可以在其中清楚地看到发布分支和 master 分支之间的区别:

  1. 在名为 release/<something> 的分支上准备发布。
  2. 准备发布时:将发布分支合并到 master。然后删除你的发布分支(它不再有目的)。
  3. 用版本号标记 master,例如 5.9.1
  4. master 上的标签创建可部署的工件。您现在有一个版本(可能用于生产环境)。您现在在所有环境中测试这些工件:测试、暂存等。如果测试失败(尽管您在合并到 master 之前已经完成了测试),那么您必须接受您现在有一个版本 5.9.1 放入废纸篓。忍受它!然后您必须重新开始一个新的发布分支,例如 release/5.9.2.
  5. 您终于可以将经过测试的工件投入生产环境了。如果事实证明新版本的生产环境存在问题(尽管进行了所有测试),那么您再次 必须创建一个新版本 。这意味着您可以使用新的发布分支重新开始,也可以遵循修补程序工作流模型。

可以看出,在 GitFlow 中,一旦合并到 master,您可能已经进行了大量测试,因此从 master 创建的版本在测试中失败的风险是苗条。

请注意,GitFlow 当然不会阻止您从 master 以外的所有其他分支创建工件,并将它们部署到除生产环境以外的任何环境以进行测试。