跳过主要内容

Git Flow 与 Trunk-Based 开发的 CI/CD 对比

探索 Git Flow 和 Trunk-Based 开发在 CI/CD 流程中的差异,并突出他们的优点和缺点。

马丁·多纳迪厄

马丁·多纳迪厄

内容营销专家

Git Flow 与 Trunk-Based 开发在 CI/CD 中的选择

选择 Git Flow 和 Trunk-Based 开发 (TBD) 可能会显著影响您的 CI/CD 工作流。以下是快速概述:

  • Git Flow: 适合结构化、版本控制的环境。它使用多个分支,如 main, develop, feature, release,和 hotfix。适合大型团队、较慢的发布周期和严格的 QA 流程。
  • Trunk-Based 开发: 集中在一个主要分支上,短暂的特性分支。适合小型团队、快速发布和强大的自动化测试。

快速比较:

模块 Git 流 主干式开发
分支复杂度 多个长期分支 单个分支,短期分支
发布频率 预定发布 持续部署
团队规模 大型团队 小型到中型团队
测试 周期末测试 自动化测试
部署风险 使用分阶段发布降低 频繁更新时风险更高
回滚 较慢 较快

关键 takeaway: 使用 Git Flow 进行结构化的较慢工作流程,TBD 速度和灵活性。两者都需要坚实的 CI/CD pipeline 才能成功。

29 - GitFlow 与 Trunk-Based Development: 管理 …

Git 流 工作流基础

Git 流

Git 流使用五种分支类型来组织开发: 主分支, 开发分支, 特性分支, 发布分支, 和 修复分支. 这种结构有助于有效地管理发布和并行开发。

Git 流程分支结构

分支类型 目的 合并目标
保存生产就绪的 code N/A
开发 集成特性; 作为特性分支的基础 N/A
特性 用于构建单个特性; 从开发分支创建 开发
发布 准备最终测试和版本化; 由开发创建 主 & 开发
热修复 快速修复生产问题; 由主创建 主 & 开发

Git Flow 的优势

  • 允许同时开发多个功能而不导致冲突。
  • 发布分支提供了一个专门的空间进行最终测试和版本准备,保持 开发 分支开放进行持续工作。
  • 紧急修复 分支使得解决生产问题变得更加容易,而不需要中断其他开发任务。

Git Flow 的缺点

  • 分支管理的复杂性:管理多个活跃分支会使合并变得更加困难。
  • 较慢的部署:正式发布流程可能会使部署速度比简单的工作流慢。
  • 维护增加:每个分支都需要自己的管道配置,这会增加维护工作量。

这种工作流程适用于需要严格版本控制、多个发布轨迹或遵守法规的项目。接下来,我们将探讨如何将其与简化的方法相比,例如主干开发。

主干开发基础

主干开发(TBD)围绕一个单独的主分支,通常称为主干或主。这种方法与 DevOps 实践和持续集成非常接近。

主干式分支结构

在典型的主干式工作流中,您将遇到这些分支类型:

分支类型 目的 生命周期
主/主干 Central branch with production-ready code __CAPGO_KEEP_0__
永久 功能分支 用于个别变更的临时分支
短暂 用于最终的调整前发布 临时

开发者们经常将小的、逐步的修改合并到主分支中——通常是每天多次。这有助于持续的测试并且快速解决冲突。

Trunk-Based Benefits

TBD为CI/CD和DevOps团队带来几个优势:

  • 减少冲突: 定期合并冲突可控。
  • 更快的反馈: 自动化构建在每次合并时运行,早期捕捉bug。
  • 更简单的管道: 单个分支减少了CI/CD设置的复杂性。
  • 更好的团队协作: 一個共享的主幹確保每個人都保持一致。

這種結構創造了一個流暢的工作流程,為下一節與 Git Flow 的比較做準備。

主幹限制

雖然 TBD 有其優勢,但它也伴隨著挑戰,團隊需要解決:

挑戰 影響 如何解決
Code穩定性 主幹變更風險 使用強大的自動化測試
團隊協調 重疊的工作可能會導致干擾 依赖于特性标志和频繁的小型提交
学习曲线 从长期分支转换 提供培训并逐渐过渡
规模问题 频繁的合并可能会淹没大型团队 强制进行彻底的code审查

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

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

这是Git Flow和Trunk-Based开发在关键方面的对比

特性比较表格

方面 Git 流 分支式开发
分支复杂度 多个长期分支 单个主分支与短期分支
发布频率 预定发布 持续部署
团队规模 适合较大的团队 更适合较小的团队
Code 审核流程 正式代码审查 持续性小频率代码审查
测试要求 关注周期末测试 依赖自动化测试
学习曲线 由于多个 branch 更加复杂 更简单的工作流程,但需要强大的测试
部署风险 使用分阶段发布降低风险 频繁更新增加风险
恢复时间 较慢的回滚过程 更快的恢复能力

使用每种工作流程的时机

Git Flow 适合企业级项目,需要结构化、版本化的发布。它适合管理多个支持版本和具有正式QA或合规需求的项目。

分支式开发 适合优先考虑速度和灵活性的团队和项目,例如:

  • 需要快速更新的SaaS平台
  • 具有强大CI/CD管道的团队
  • 依赖可靠的自动化测试的项目
  • 持续部署工作流或频繁发布
  • 需要定期更新的移动应用项目

有些团队甚至结合了这两种方法:使用Trunk-Based Development为核心服务,Git Flow为具有正式发布跟踪的项目。

下一个:如何设置CI/CD管道,适用于两种方法。

CI/CD管道设置

Git Flow CI/CD设置

  • 开发分支管道: 运行单元测试、集成测试、code质量检查、构建验证和部署到开发环境。
  • 发布分支管道: 执行完整测试套件、安全扫描、构建发布候选版本和部署到预发布环境。
  • 主分支管道: 运行验证测试、处理版本号、创建生产构建、部署到生产环境并标记发布。

Trunk-Based CI/CD设置

  • 特性分支管道: Focuses on quick unit tests, code style checks, build verification, and deployment to a preview environment.
  • 主分支管道: Covers thorough automated testing, security scans, production build creation, progressive deployment, and automated rollback features.

Capgo __CAPGO_KEEP_0__

Capgo 实时更新控制台界面

为了在 CI/CD 设置中添加实时的即时更新功能,Capgo 可以无缝整合:

Capgo 与 GitHub 动作, GitLab CI, 和 Jenkins 为了在 Git Flow 和 Trunk-Based pipeline 中启用实时更新、分阶段发布和即时回滚功能。它满足 Apple 和 Google 的要求,同时支持云和自主部署 [1].

概要和建议

根据团队大小和 CI/CD 成熟度水平选择您的工作流程,以下表格提供参考

场景 Git Flow Trunk-Based
团队大小 50+ 名开发人员 少于 50 名开发人员
发布频率 每周或每月 每日或多次每日
测试 & QA 传统的QA周期 专注于自动化测试
部署模型 多版本,传统 __CAPGO_KEEP_0__
风险承受度 保守,受监管的设置 进步,快速反馈
  • 在小型团队中从Trunk-Based Development开始,然后扩展到更大的团队。确保您的CI/CD管道在过渡之前完全自动化。
  • 保持一致的code审查并在两种工作流程中使用特性开关。将管道配置与所选的工作流程对齐。

一些团队可能会混合这些方法 - 使用Git Flow进行重大发布,同时利用Trunk-Based Development进行特性交付。无论您走哪条路,成功都依赖于正确地集成CI/CD,自动化测试,并确保团队保持一致。

从 Git Flow 与 Trunk-Based 进行 CI/CD

如果您正在使用 Git Flow 与 Trunk-Based 进行 CI/CD 来规划 CI/CD 自动化,连接它与 Capgo CI/CD 为 Capgo CI/CD 产品工作流程 Capgo 原生构建 为 Capgo 原生构建产品工作流程 Capgo 集成 为 Capgo 集成产品工作流程 CI/CD 集成 CI/CD 集成的实现细节 GitHub Actions Integration 为GitHub Actions Integration提供实施细节。

Capacitor 应用程序的实时更新

当 web 层面的 bug 在线时,通过 Capgo 将修复推送到用户端,而不是等待几天的 app store 审批。用户在后台接收更新,而原生变化仍在正常的审批路径中。

立即开始

最新博客

Capgo 为您提供创建真正专业的移动应用所需的最佳见解。