Qiuliang's Site

做一个独立思考和具备创新能力的人,打造谦逊和强大的内心

git分支模型探讨

在阅读本文之前,假设你已经熟悉了git的常用命令,并且对git的分支模型有了基本的了解。

基础常用命令:

  • git clone
  • git add
  • git commit
  • git push
  • git checkout
  • git branch
  • git fetch
  • git merge
  • git pull

关于git分支模型,建议先阅读如下资料:

如下是网络上流传比较广泛的一个较为成熟的git分支示意图,基本能满足一般团队或个人进行代码管理。

但每个team都有自己的需求和特点,生搬硬套不一定是合适的,和同事花1个多小时的时间讨论了一下,认为适合我们team的分支模型,大致如下。

需求背景

主要的需求如下:

  • 能支持日常迭代开发、紧急线上bug修复、多功能并行开发
  • 大概50人左右的团队,平日迭代项目较多,且周期短(1~2周一个迭代)
  • 能够通过tag重建整个系统
  • 支持code review
  • 所有上线的代码必须都是经过测试保证,且能自动同步到下一次的迭代中
  • 能和公司的项目管理/持续集成系统整合

分支模型说明

1. 日常迭代

1.1 流程说明

  • 项目负责人先初始化仓库
  • 拉分支,同时包括develop和release分支
  • develop分支开发完成后,提交pull requests到release分支
  • 进行code review,通过则merge到release分支
  • 在release分支上进行build和生成上线包
  • 部署上线包,上线完成后再merge到master,并打tag

1.2 后续迭代流程

  • 从master上一次tag处拉出分支,同时包括dev和release
  • 在dev上进行开发和提交
  • 开发完成后,提交pull request到release分支
  • 进行code review,通过则merge到release分支
  • 在release分支上进行build和生成上线包
  • 部署上线包,上线完成后再merge到master,并打tag

2. 在正常迭代同时有紧急线上问题修复

  • 迭代分支同上
  • 同时再拉出hotfix开发和hotfix_release分支
  • 此时迭代和hotfix分支并行开发
  • 如果hotfix开发完成,并在hotfix_release分支进行提测并上线
  • 那么在迭代开发进行pull request前,应该要求先从master分支进行一次merge

3. 多功能并行

理论上和hotfix分支模型没有区别。

相关规范

  • 开发人员不应该操作master分支
  • 由每个迭代或项目的负责人来进行code review和进行merge操作
  • 各开发分支和release分支均应该push到远程仓库
  • 日常迭代和release分支在开发完成后应该被删除
  • 多人协作,应该使用同一个远程分支
  • 每次发起pull request前,都需要先从master分支merge代码