Skip to content

git工作流实践

约 1474 字大约 5 分钟

git工具

2022-04-18

在现代软件开发中,Git已成为最主流的版本控制工具。它高效、安全且灵活的特性,为团队协作和项目管理提供了坚实基础。而一个合适的分支管理方案,能够最大化发挥Git的潜力,提升开发效率。

虽然经典的Git-flow方案在中大型项目中表现出色,但在实际应用中,我发现其流程略显复杂。经过多个项目的实践验证,我总结出一套简化的分支管理策略,在保证版本管理严谨性的同时,更贴合实际开发需求。

现实开发场景分析

标准的版本迭代流程

典型的软件版本迭代遵循这样的路径:

需求评审 → 需求确认 → 开发阶段 → 测试环境测试 → 预生产发布验证 → 生产环境发布验证 → 发布完成

这个流程中,每个环节都可能出现需要返工的情况:

  • 测试环境发现bug,需要返回开发阶段修复
  • 预生产环境发现问题,同样需要重新开发、测试、发布
  • 生产环境出现问题,需要紧急回滚并重新走完整流程

需求变更的现实挑战

理论上,版本进入开发阶段后需求应该保持稳定。但现实中,需求变更、功能增删时有发生,这些变更可能出现在开发阶段,也可能出现在测试阶段。

虽然频繁变更需求确实影响项目稳定性,但这是无法完全避免的现实情况,即使最成熟的团队也会遇到类似问题。

周期性发布模式

部分成熟项目采用周期性发布策略,比如每两周固定发布一个版本。这种模式下,版本内容取决于各功能的开发进度和周期内的计划安排。

通过建立需求池,为每个需求制定线性迭代计划,可以更清晰地规划未来版本的功能上线。这种情况下,单一develop分支难以满足多需求并行开发和测试的需求。

团队Git技能水平

工具效能的发挥不仅取决于工具本身,更取决于团队对工具的掌握程度。早期我认为团队成员Git水平差异不大,只需简单说明流程即可,但实践证明这存在风险:

  • 主分支可能被误操作污染
  • 多个功能在同一个分支开发造成混乱

解决这些问题需要建立完善且低复杂度的操作规范,并配合适当的分支权限控制。

优化的分支管理方案

基于上述场景,我总结出以下分支管理策略:

核心分支定义

master分支

  • 主分支,保存正式版本的代码提交记录
  • 禁止直接提交改动,仅接受来自release分支的合并请求
  • 合并后打上版本标签(tag)

release分支

  • 发布分支,用于预生产和生产环境发布
  • 发布完成后合并到master分支
  • 仅接受来自prerelease分支的合并请求

prerelease/*分支组

  • 预发布分支,按版本号创建新分支
  • 合并当前版本相关的feature/*分支,进入测试阶段
  • 尽量减少直接提交,主要作为代码集成和测试的平台

feature/*分支组

  • 功能开发分支(包括热修复)
  • 从master分支创建,每个分支只负责单一业务功能
  • 所有开发改动都在feature分支进行
  • 只能合并到prerelease分支
  • 需要及时同步master分支的更新

工作流示意图

git-work-flow

方案优势

简化流程

整个方案只包含四条主要分支,分支间的流向都是单向的,既简单易懂又保持灵活性。

prerelease分支的价值

用prerelease分支组替代单一的develop分支,能够灵活应对需求变更。当计划调整时,可以直接废弃当前prerelease分支,新建分支重新合并feature代码。

master与release分离

将发布、回滚等操作放在release分支进行,保持master分支的提交历史干净整洁,便于维护和追溯。

最佳实践建议

分支权限控制

建议对master和release分支设置保护,确保只能通过合并请求的方式接受代码。

合并策略选择

  • 需要完整追踪提交记录:使用merge
  • 追求线性整洁的提交历史:使用rebase

代码审查机制

feature分支合并到prerelease分支时,建议通过Pull Request流程,在测试前进行代码审查。

示例流程:
1. 从master创建feature/user-auth分支
2. 完成功能开发后,发起到prerelease/v1.2的PR
3. 团队成员代码审查
4. 合并到prerelease分支进行测试
5. 测试通过后,prerelease合并到release发布
6. 发布完成后,release合并到master并打tag

重要说明

本方案基于我个人工作实践总结,在团队内部经过两年多的验证和调整。每个团队的情况不同,请根据实际需求评估适用性。

分支管理方案的选择需要考虑团队规模、产品复杂度等多方面因素。没有绝对的最佳方案,只有最适合自己团队的方案。

这套分支管理策略在保持Git强大功能的同时,通过简化流程降低了团队的学习成本,在实践中证明了其可行性和有效性。希望这些经验能为你的团队提供有价值的参考。