Git 分支设计规范

概述

这篇文章分享 Git 分支设计规范,目的是提供给研发人员作参考。git

规范是死的,人是活的,但愿本身定的规范,不要被打脸。测试

在说 Git 分支规范以前,先说下在系统开发过程当中经常使用的环境。设计

简称 全称
DEV Development environment
FAT Feature Acceptance Test environment
UAT User Acceptance Test environment
PRO Production environment
  • DEV 环境:用于开发者调试使用。
  • FAT 环境:功能验收测试环境,用于测试环境下的软件测试者测试使用。
  • UAT 环境:用户验收测试环境,用于生产环境下的软件测试者测试使用。
  • PRO 环境:就是生产环境。

好比,项目域名为:http://www.abc.com,那么相关环境的域名可这样配置:调试

  • DEV 环境:本地配置虚拟域名便可
  • FAT 环境:http://fat.abc.com
  • UAT 环境:http://uat.abc.com
  • PRO 环境:http://www.abc.com

接下来,针对不一样的环境来设计分支。日志

分支

分支 名称 环境 可访问
master 主分支 PRO
release 预上线分支 UAT
hotfix 紧急修复分支 DEV
develop 测试分支 FAT
feature 需求开发分支 DEV

master 分支

master 为主分支,用于部署到正式环境(PRO),通常由 releasehotfix 分支合并,任何状况下不容许直接在 master 分支上修改代码。code

release 分支

release 为预上线分支,用于部署到预上线环境(UAT),始终保持与 master 分支一致,通常由 develophotfix 分支合并,不建议直接在 release 分支上直接修改代码。接口

若是在 release 分支测试出问题,须要回归验证 develop 分支看否存在此问题。开发

hotfix 分支

hotfix 为紧急修复分支,命名规则为 hotfix- 开头。文档

当线上出现紧急问题须要立刻修复时,须要基于 releasemaster 分支建立 hotfix 分支,修复完成后,再合并到 releasedevelop 分支,一旦修复上线,便将其删除。部署

develop 分支

develop 为测试分支,用于部署到测试环境(FAT),始终保持最新完成以及 bug 修复后的代码,可根据需求大小程度肯定是由 feature 分支合并,仍是直接在上面开发。

必定是知足测试的代码才能往上面合并或提交。

feature 分支

feature 为需求开发分支,命名规则为 feature- 开头,一旦该需求上线,便将其删除。

这么说可能有点不容易理解,接下来举几个开发场景。

开发场景

新需求加入

有一个订单管理的新需求须要开发,首先要建立一个 feature-order 分支,问题来了,该分支是基于哪一个分支建立?

若是 存在 未测试完毕的需求,就基于 master 建立。

若是 不存在 未测试完毕的需求,就基于 develop 建立。

  1. 需求在 feature-order 分支开发完毕,准备提测时,要先肯定 develop 不存在未测试完毕的需求,这时研发人员才能将将代码合并到 develop (测试环境)供测试人员测试。

  2. 测试人员在 develop (测试环境) 测试经过后,研发人员再将代码发布到 release (预上线环境)供测试人员测试。

  3. 测试人员在 release (预上线环境)测试经过后,研发人员再将代码发布到 master (正式环境)供测试人员测试。

  4. 测试人员在 master (正式环境) 测试经过后,研发人员须要删除 feature-order 分支。

普通迭代

有一个订单管理的迭代需求,若是开发工时 < 1d,直接在 develop 开发,若是开发工时 > 1d,那就须要建立分支,在分支上开发。

开发后的提测上线流程 与 新需求加入的流程一致。

修复测试环境 Bug

develop 测试出现了Bug,若是修复工时 < 2h,直接在 develop 修复,若是修复工时 > 2h,须要在分支上修复。

修复后的提测上线流程 与 新需求加入的流程一致。

修改预上线环境 Bug

release 测试出现了Bug,首先要回归下 develop 分支是否一样存在这个问题。

若是存在,修复流程 与 修复测试环境 Bug流程一致。

若是不存在,这种可能性比较少,大部分是数据兼容问题,环境配置问题等。

修改正式环境 Bug

master 测试出现了Bug,首先要回归下 releasedevelop 分支是否一样存在这个问题。

若是存在,修复流程 与 修复测试环境 Bug流程一致。

若是不存在,这种可能性也比较少,大部分是数据兼容问题,环境配置问题等。

紧急修复正式环境 Bug

需求在测试环节未测试出 Bug,上线运行一段时候后出现了 Bug,须要紧急修复的。

我我的理解紧急修复的意思是没时间验证测试环境了,但仍是建议验证下预上线环境。

  • 若是 release 分支存在未测试完毕的需求,就基于 master 建立 hotfix-xxx 分支,修复完毕后发布到 master 验证,验证完毕后,将 master 代码合并到 releasedevelop 分支,同时删掉 hotfix-xxx 分支。

  • 若是 release 分支不存在未测试完毕的需求,但 develop 分支存在未测试完毕的需求,就基于 release 建立 hotfix-xxx 分支,修复完毕后发布到 release 验证,后面流程与上线流程一致,验证完毕后,将 master 代码合并到 develop 分支,同时删掉 hotfix-xxx 分支。

  • 若是 releasedevelop 分支都不存在未测试完毕的需求, 就直接在 develop 分支上修复完毕后,发布到 release 验证,后面流程与上线流程一致。

并行提测

在一个项目中并行开发了两个需求,并行提测,可是上线日期不一样。

我能想到的两种方案:

  • 再部署一套可供测试人员测试的分支
  • 使用 git cherry-pick “挑拣”提交

对于并行提测,你有好的方案吗?欢迎留言。

Commit 日志规范

提交信息必定要认真填写!

建议参考规范:<type>(scope):<subject>

好比:fix(首页模块):修复弹窗 JS Bug。

type 表示 动做类型,可分为:

  • fix:修复 xxx Bug
  • feat:新增 xxx 功能
  • test:调试 xxx 功能
  • style:变动 xxx 代码格式或注释
  • docs:变动 xxx 文档
  • refactor:重构 xxx 功能或方法

scope 表示 影响范围,可分为:模块、类库、方法等。

subject 表示 简短描述,最好不要超过 60 个字,若是有相关 Bug 的 Jira 号,建议在描述中加上。

小结

暂时就想到这么多,规范这东西不是一成不变的,供参考。

推荐阅读

相关文章
相关标签/搜索