Git 类似 "nvie gitflow" 的分支/工作流模型,但没有发布分支

Git branching / workflow model like "nvie gitflow" but without release branches

是否有官方记录的 git 工作流程,就像 nvie 的 "Gitflow" 工作流程一样,但没有发布分支?

http://nvie.com/posts/a-successful-git-branching-model/

https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow

我想我没有看到发布分支的目的,为什么不直接标记来自 master 的发布? (也许那是一回事)。

here Github 提供了一个非常好的简化版本。

Here 是我发给所有新员工的带有标签的。

nvie 的分支模型(以及因此在 git-flow 工具中)的发布概念与分支 masterdevelop 之间的区别有关。在 nvie 的模型和 GitHub 的模型中,master 应该是 'fit for production'。但是你怎么能保证呢?

why not just tag a release from master?

GitHub 的分支模型就是这样做的...

如果并发功能分支很少,您只需测试(并审查,以及您想要或需要的任何其他 QA)您的功能分支,然后再将它们合并到 master。如果重大更改已合并到 master(或者如果更改 - 违反分支模型 - 直接提交到 master),因为相应的功能分支已分支,请合并 master测试之前进入功能分支,因此您已经在测试代码的集成状态。

为此,GitHub 的分支模型,因为 工作得很好。

如果发布涉及一些代码更改(例如,修改版本号、总结更改日志),可以直接在 master 或专用分支上执行此操作。无论如何,master在这里作为,整合和稳定分支。

...但这对每个项目来说还不够

如果您在具有许多并发功能分支的项目中应用 GitHub 的分支模型,并且其中一些功能分支没有您希望的那么短暂,那么很可能在您测试时并 QAed 你的功能分支(master 合并到其中),master 已经被其他合并更改,所以你必须重新测试。此外,由于项目中发生了这么多事情,您可能很难知道要测试哪些内容以确保您没有破坏任何其他(可能是最近合并的)功能。

nvie的master(稳定)↔develop(整合)区别

因此,在繁忙的项目中,有一个集成/稳定分支是有意义的,其中所有功能分支将在分别经过测试和 QAed 单独 后合并。这使我们有机会在决定此集成的给定快照是否应成为发布并因此声明 'fit for use' 之前,再次组合测试和 QA 功能实现。 Nvie 的分支模型将此集成分支称为developmaster 失去集成角色,只是成为 develop.

被认为稳定的快照的分支

但是等等 — "snapshots" — 这不正是 Git 标签提供的吗?为什么单独的分支 master,那么呢?再一次:

why not just tag a release from master[develop]?

仅为方便起见:用户(或操作员、部署专员等)不关心他们使用的确切版本,只要它是稳定版本(或想要最新最好的版本)stable 版本)可以只检查 master(并拉取 master 进行更新),而不必查看有哪些标签,也不必弄清楚您的版本编号方案.

发布分支

I always thought releases as being static clones, not dynamic branches.

他们是。发布分支 不是 完成的发布。这是一个准备发布。它用于增加版本号,并执行您可能不想在功能分支上执行的其他代码更改(例如,因为它们混淆了实际的实现更改)但对于完成的软件来说是必需的。 (例如,将翻译文件与应用程序实际需要的 UI 字符串同步。)

发布分支可以任意短暂。一旦您对发布准备工作充满信心,您就可以将发布分支合并到 developmaster,另外放置一个标签 然后 删除 发布分支.

不要使用发布分支来维护版本。这就是修补程序和(在 git-flow 工具的更新版本中)支持分支的目的。

为什么不直接在 develop 上发布所有提交?好吧,如果它们需要更长的时间(或者如果它们需要合作并因此需要发布中间状态),将它们放在专用的发布分支上可以让您控制什么进入发布,什么不进入发布,而不必阻止develop 用于进一步集成在您忙于发布时准备就绪的功能。

git flow

中发布分支

即使你的发布不需要额外的步骤,因为你没有把你项目的版本放到仓库的内容中,也不必更新第三方依赖的使用版本,也不要推迟更新您的翻译等,可能值得使用 git flowrelease 子命令,因为它们通过自动化帮助您不要忘记 nvie 分支模型的重要规则:

  • 将发布分支合并到 master develop
  • 一致地标记版本
  • 完成后实际删除发布分支

如果发布不需要合作(或者在你的项目中根本不涉及专门的步骤),你可以

git flow release start <version number>
git flow release finish <same version number>

finish 再次删除之前无需推送发布分支(在合并和标记之后,这就是您想要的效果)。

要使生成的版本对世界可见,则

git push origin develop master <version you just released>

以便将两个分支上的合并和新标签发送到 origin

如果您已经推送了发布分支(手动或使用git flow publish release <version number>),请改用

git push origin :release/<version number> develop master <version number>