跳转至正文

面向 CI/CD 的 Git Flow 与 Trunk-Based 对比

探讨 Git Flow 与 Trunk-Based Development 在高效 CI/CD 工作流中的差异,并分析各自的优缺点。

Git Flow 与 Trunk-Based 的 CI/CD 对比 Capgo 博客插图

在 Git Flow 和 Trunk-Based Development (TBD) 之间做选择,会显著影响你的 CI/CD 工作流。快速拆解如下:

  • Git Flow:最适合结构化、版本控制严格的环境。它使用多个分支,例如 main, develop, feature, release,以及 hotfix。适合大型团队、发布周期较长以及 QA 流程严格的场景。
  • 基于主干的开发模式 (Trunk-Based Development):专注于单一主分支和短生命周期的功能分支。适合小型团队、快速发布节奏以及强大的自动化测试。

快速对比:

维度 Git Flow 基于主干的开发模式 (Trunk-Based Development)
分支复杂度 多个长期分支 单分支,短生命周期分支
发布节奏 按计划发布 持续部署
团队规模 大型团队 中小型团队
测试 周期末测试 自动化测试
部署风险 分阶段发布,风险较低 频繁更新,风险较高
回滚 较慢 更快

核心要点:使用 Git Flow 实现结构化、较慢的工作流,使用 TBD 追求速度和灵活性。两者都需要可靠的 CI/CD pipeline 才能成功。

29 - GitFlow vs. 主干开发:管理…

Git Flow 工作流基础

Git Flow

Git Flow 使用五种分支类型来组织开发: main, develop, feature, 发布版,以及 hotfix. 这种结构有助于高效管理版本发布和并行开发。

Git Flow 分支结构

分支类型 用途 合并目标
主要 存放生产就绪的 code 不适用
Develop 集成功能;作为功能分支的基础 不适用
功能 用于开发单个功能;从 develop 分支创建 develop
发布 为最终测试和版本发布做准备;从 develop 分支创建 main & develop
Hotfix 快速修复生产问题;从 main 分支创建 main & develop

Git Flow 的优势

  • 允许同时开发多个功能,且不会产生冲突。
  • Release 分支为最终测试和版本准备提供专用空间,同时保持 develop 分支开放,以便持续开发。
  • Hotfix Hotfix 分支可以快速解决生产问题,而不会中断其他开发任务。

Git Flow 的缺点

  • 分支管理复杂: 管理多个活跃分支会让合并更具挑战性。
  • 部署速度较慢: 相比更简单的 workflow,正式发布流程可能会拖慢部署速度。
  • 维护成本增加:每个分支都需要独立的 pipeline 配置,增加了维护工作量。

这种工作流最适合需要严格版本控制、多条发布轨道或满足合规要求的项目。接下来,我们会看看它与更精简的 Trunk-Based Development 方法相比如何。

Trunk-Based Development 基础知识

Trunk-Based Development (TBD) 以单一的主分支(通常称为 trunk 或 main)为核心。这种方法与 DevOps 实践和持续集成高度契合。

Trunk-Based 分支结构

在典型的 TBD 工作流中,你会遇到以下几种分支类型:

分支类型 用途 生命周期
主分支/Trunk 包含生产就绪 code 的中央分支 永久性
功能分支 用于单个变更的临时分支 生命周期短
发布分支 用于发布前的最终微调 临时性

开发者会定期将小型的增量变更合并到主分支——通常每天多次。这有助于持续测试,并帮助快速解决冲突。

Trunk-Based 的优势

对于使用 CI/CD 和 DevOps 的团队,TBD 具有以下优势:

  • 更少的合并冲突: 定期合并让冲突保持可控。
  • 更快的反馈:每次合并都会运行自动化构建,及早发现 bug。
  • 更简单的 Pipeline:单一分支降低了 CI/CD 配置的复杂度。
  • 更好的团队协作:共享主干确保团队步调一致。

这种结构形成了精简的工作流,为下一节与 Git Flow 的对比奠定了基础。

Trunk-Based 的局限性

虽然 TBD 有其优势,但也伴随着团队需要应对的挑战:

挑战 影响 如何应对
Code 稳定性 破坏性变更影响主分支的风险 使用强大的自动化测试
团队协作 重叠的工作可能导致干扰 依赖功能标志和频繁的小提交
学习曲线 从长期分支过渡 提供培训并逐步实施
扩展性问题 频繁合并可能让大型团队不堪重负 强制进行彻底的 code 审查

成功采用 TBD 需要扎实的自动化测试和团队内部的开放沟通。

Git Flow vs. Trunk-Based:直接对比

以下是 Git Flow 与 Trunk-Based 开发在关键方面的对比:

功能对比表

维度 Git Flow 基于主干的开发模式 (Trunk-Based Development)
分支复杂度 多个长期分支 单一主分支,配合短期分支
发布节奏 按计划发布 持续部署
团队规模 适合大型团队 更适合小型团队
Code 审查流程 分支合并时的正式审查 持续审查小而频繁的变更
测试要求 侧重周期末测试 高度依赖自动化测试
学习曲线 因多分支而更复杂 工作流更简单,但需要强大的测试
部署风险 分阶段发布降低风险 频繁更新风险更高
恢复时间 回滚流程更慢 更快的回滚能力

何时使用每种工作流

Git Flow 非常适合需要结构化、版本化发布的企业级项目。对于管理多个受支持版本、且有正式 QA 或合规需求的团队和项目来说,也非常合适。

基于主干的开发模式 (Trunk-Based Development) 最适合重视速度与灵活性的团队和项目,例如:

  • 需要快速迭代的 SaaS 平台
  • 拥有完善 CI/CD pipeline 的团队
  • 有可靠自动化测试保障的项目
  • 持续部署工作流或高频发布
  • 需要定期更新的移动 App 项目

有些团队甚至会结合使用这两种方法:核心服务采用 Trunk-Based Development,而具有正式发布流程的项目则使用 Git Flow。

下一篇:如何为这两种模式配置 CI/CD pipeline。

CI/CD Pipeline 配置

Git Flow CI/CD 配置

  • 开发分支 Pipeline: 运行单元测试、集成测试、code 质量检查、构建验证,并部署到开发环境。
  • 发布分支 Pipeline: 执行完整测试套件、安全扫描、构建 Release Candidate,并部署到 Staging 环境。
  • 主分支流水线: 执行验证测试、管理版本、创建生产构建、部署到生产环境,并为发布打标签。

Trunk-Based CI/CD 配置

  • 特性分支流水线: 侧重快速单元测试、code 风格检查、构建验证,以及部署到预览环境。
  • 主分支流水线: 涵盖全面的自动化测试、安全扫描、创建生产构建、渐进式部署和自动回滚功能。

Capgo CI/CD 集成

Capgo Live Update Dashboard 界面

要在任一 CI/CD 配置中添加实时空中更新,Capgo 可无缝集成:

Capgo 支持 GitHub 操作, GitLab CI,以及 Jenkins 在 Git Flow 和 Trunk-Based 流水线中启用实时更新、分阶段发布和即时回滚。它满足 Apple 和 Google 的要求,同时支持云端和自托管部署 [1].

总结与建议

根据团队规模和 CI/CD 成熟度,使用下表选择适合的工作流:

场景 Git Flow 主干开发
团队规模 50+ 名开发者 少于 50 名开发者
发布频率 每周或每月 每天或每天多次
测试与 QA 传统 QA 周期 专注于自动化测试
部署模式 多版本,传统模式 云原生、容器化
风险容忍度 保守、受监管的环境 渐进式、快速反馈
  • 小团队先从 Trunk-Based Development 开始,再扩展到更大的团队。切换前,确保 CI/CD pipeline 已完全自动化。
  • 在两种工作流中都要保持一致的 code review,并使用 feature toggles。pipeline 配置要与所选工作流保持一致。

有些团队可能会混用这些方法——用 Git Flow 做重大版本发布,同时用 Trunk-Based Development 做功能交付。无论选哪条路,成功都取决于是否正确集成 CI/CD、实现测试自动化,并让团队保持步调一致。

继续阅读:Git Flow vs Trunk-Based for CI/CD

如果你正在使用 面向 CI/CD 的 Git Flow 与 Trunk-Based 对比 规划 CI/CD 自动化,并将其与 Capgo CI/CD 集成 用于 Capgo CI/CD 中的产品工作流, Capgo Native Build 用于 Capgo Native Builds 中的产品工作流, Capgo 集成 用于 Capgo 集成中的产品工作流, CI/CD 集成 了解 CI/CD 集成的实现细节,以及 GitHub Actions 集成 有关 GitHub Actions 集成的实现细节。

为 Capacitor 应用提供 Live Updates

当 Web 层出现线上 Bug 时,通过 Capgo 发布修复,而不用等 App Store 审核好几天。用户会在后台收到更新,原生变更则仍走正常审核流程。

博客最新动态

Capgo 为你提供打造真正专业的移动应用所需的最有价值的洞察。