跳过主要内容

Git Flow vs Trunk-Based for CI/CD

探索 Git Flow 和 Trunk-Based 开发之间的差异,了解它们的优缺点,有效的 CI/CD 工作流程

马丁·多纳迪厄

马丁·多纳迪厄

内容营销专家

Git Flow vs Trunk-Based for CI/CD

选择 Git Flow 和 Trunk-Based 开发 (TBD) 可以显著影响您的 CI/CD 流程。以下是一些快速的分解:

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

快速比较:

方面 Git Flow Trunk-Based 开发
分支复杂度 多个长期分支 单个分支,短期分支
发布频率 预定发布 持续部署
团队规模 大型团队 小到中型团队
测试 周期末测试 自动化测试
部署风险 降级 频繁更新
回滚 较慢 较快

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

29 - GitFlow vs. Trunk-Based Development: 管理 …

Git Flow 工作流程基础

Git Flow

Git Flow 使用以下五种分支类型组织开发: 主分支, 开发分支, 特性分支, 发布分支, 和 修复分支. This structure helps manage releases and parallel development effectively.

Git Flow 分支结构

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

Git Flow 的优势

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

Git Flow 的劣势

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

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

树状开发基础

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

树状开发分支结构

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

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

开发人员经常将小的、增量式的更改合并到主分支中 - 经常在一天内进行多次。这鼓励持续测试并有助于快速解决冲突。

主干式优势

CI/CD和DevOps团队将获得TBD的以下优势:

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

这种结构创建了一个流线化的工作流程,为下一节与Git Flow的比较做好准备。

TBD的局限性

: 虽然TBD有其优势,但它也带来了团队需要解决的问题。

挑战 影响 如何解决
Code 稳定性 主分支的破坏性变化风险 使用强大的自动化测试
团队协调 重叠的工作可能会导致中断 依赖于特性标志和频繁的小型提交
学习曲线 从长期分支过渡 提供培训并逐渐过渡
Scaling Issues 大规模团队中频繁合并代码可能会造成问题 严格进行code代码审查

成功采用Trunk-Based Development需要团队内部的自动化测试和开放式沟通

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

Git Flow和Trunk-Based Development在关键方面的比较如下:

特性比较表格

方面 Git Flow Trunk-Based Development
Branch Complexity 多个长期存活的分支 单一主分支与短命分支
发布频率 预定发布 持续部署
团队规模 适合较大的团队 更适合小型团队
Code 审核流程 分支合并时进行正式审核 持续小幅变更的审核
测试要求 关注周期末的测试 自动化测试的过度依赖
学习曲线 由于多个分支而更复杂 更简单的工作流程,但需要强大的测试
部署风险 分阶段发布的风险较低 频繁更新的风险较高
恢复时间 更慢的回滚过程 更快的恢复能力

使用每种工作流程的时机

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

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

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

有些团队甚至结合了这两种方法:使用分支式开发为核心服务,Git Flow用于具有正式发布轨迹的项目。

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

CI/CD管道设置

Git Flow CI/CD设置

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

干流式 CI/CD 配置

  • 功能分支管道: 专注于快速单元测试、code 风格检查、构建验证和预览环境部署。
  • 主分支管道: 覆盖全面自动化测试、安全扫描、生产构建创建、渐进式部署和自动回滚功能。

Capgo CI/CD 集成

Capgo Live Update Dashboard Interface

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

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

总结和建议

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

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

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

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

如果您正在使用 Git Flow vs Trunk-Based for CI/CD 来规划CI/CD自动化,连接它与 Capgo 流水线/持续集成 Capgo 产品工作流程在流水线/持续集成中 Capgo 原生构建 Capgo 产品工作流程在原生构建中 Capgo 集成 Capgo 产品工作流程在集成中 CI/CD 集成 __CAPGO_KEEP_0__ 流水线/持续集成集成 GitHub 动作集成 GitHub 流水线/持续集成集成的实现细节

Capacitor 应用的实时更新

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

来自马丁的专业支持

立即开始

最新博客

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