GitLab Flow 是 GitLab 提出的分支管理模型,旨在简化分支结构并增强代码交付的灵活性。它结合了 GitHub Flow 的简洁性和 Git Flow 的规范性,并添加了一些企业级功能,如支持环境分支和严格的部署流程。因此,GitLab Flow 适用于持续交付和复杂环境管理的项目。
GitLab Flow 特性
单一主分支
GitLab Flow 通常围绕一个主分支(通常命名为“main”或“master”)进行管理,主分支保存生产环境中准备发布的代码。
功能分支
开发人员从主分支创建功能分支,用于开发新功能或修复问题。每个功能分支代表一个独立的工作单元,完成后会合并回主分支。
合并请求(Merge Requests, MRs)
开发人员通过合并请求将功能分支中的更改提交到主分支。合并请求提供了一种机制,用于代码审查、讨论和批准,确保代码质量在合并之前得到保证。
持续集成(Continuous Integration, CI)
GitLab Flow 与 GitLab 内置的 CI/CD 管道深度集成,实现测试和部署过程的自动化。每当打开合并请求时,CI 管道会自动触发,确保更改通过测试后才允许合并。
环境分支
GitLab Flow 可以引入特定环境的分支(例如“staging”或“production”),用于部署测试或生产环境的代码。这些分支帮助开发、测试和生产环境保持清晰的分离。
发布分支(可选)
尽管 GitLab Flow 主要关注持续交付(Continuous Delivery)而非传统的发布周期,团队可以根据项目需求选择创建发布分支以管理版本化的发布。这是一个可选特性,是否使用取决于具体项目的要求。
多环境分支示例
以下是开发order和payment两个新功能、发布版本并修复生产缺陷的全过程:
- 开发新功能order :从main分支上创建出feature/order分支,在开发完成后合并回main分支。
- 开发新功能payment :从main分支上创建出feature/payment分支,在开发完成后合并回main分支。
- 测试 :合并main分支上的代码到staging分支,部署staging分支代码到staging环境进行测试工作。
- 修复缺陷 :在测试order时发现了缺陷,由开发人员在feature/order分支上修复缺陷,通过合并请求(MR)将更改重新合并到 main 分支。紧接着,合并main分支上的代码到staging分支,重新部署staging分支代码到staging环境进行缺陷验证工作。
- 发布 :测试通过后,合并staging分支到production分支,并打上tag v1.0.0,发布production分支代码到生产环境。
- 修复生产缺陷 :发布到生产环境后如果出现了缺陷,则从main分支创建hotfix/order-123分支,在这个分支上修复缺陷,通过合并请求(MR)将更改重新合并到 main 分支。紧接着,cherry-pick hotfix/order-123的commit提交到staging分支,部署staging分支到staging环境,验证缺陷是否已被修复。验证通过后,cherry-pick hotfix/order-123的commit提交到production分支,打上tag v1.0.1,部署production分支到production环境。
GitLab Flow 优缺点
优点
- 简化分支结构:采用较少的长期分支,减少分支管理复杂性。功能分支生命周期短,避免长期分支导致的冲突。
- 灵活的环境管理:支持环境分支,与 CI/CD 流程深度集成,可以轻松部署到不同的环境。
- 增强的协作:强调 Merge Request(MR)和代码审查,确保代码质量。
- 版本管理和长期维护:支持通过标签和版本分支管理不同版本,适用于需要维护多个版本的项目。
缺点
- 对流程控制要求较高: 需要团队熟悉 CI/CD 流程和环境分支的管理。
- 不适合极为复杂的开发场景: 对于需要复杂分支结构(如 release 和 hotfix)的大型项目,可能需要额外调整。
适用场景
- 多环境部署的项目:如需要开发、测试、预生产和生产等多个环境。
- 中型团队:需要明确分支管理,但又不希望像 Git Flow 那样复杂。
- 持续交付(CD)场景:希望通过简单的分支管理实现高效交付。
总结
GitLab Flow 是一种平衡了简洁性和灵活性的分支管理模型,适合现代 CI/CD 流程的项目。通过功能分支、环境分支和版本管理,GitLab Flow 能够满足从简单项目到复杂项目的多种需求,同时提供高效的协作和部署能力。