一、分支管理规范

  1. Git Flow 模型

Git 流程使用规范

(图片来源:A successful Git branching model)

  1. Git Flow 分支说明

Master

发版分支 + 保护分支。功能代码在 Release 分支上测试通过、或 BUG 已在 Hotfix 分支上修复,则需要将代码合并到 Master 分支。代码合并到 Master 分支,即代表可以随时发版,发版成功时需要基于 Master 分支上的最新提交节点打 Tag。

Hotfix

修复分支 + 临时分支。线上出现紧急 Bug 时,需要基于对应版本的 Tag 创建修复分支,问题修复完成时以此分支进行提测。问题修复后,需将代码合并到 Develop 和 Master 分支。

基于发版 Tag 创建,最后合并到 Develop 和 Master 分支。

Release

预发布分支 + 临时分支。功能开发完成并合并到 Develop 分支时,基于 Develop 分支创建 Release 分支进行提测 。Release 分支上出现影响发版的 Bug 时,需要创建 Feature 分支修改 Bug;当测试通过后,需将代码合并到 Develop 和 Master 分支。

基于 Develop 分支创建,最后合并到 Develop 和 Master 分支。

Develop

开发分支 + 保护分支。多人协作开发时的代码合并总分支,功能分支向 Develop 分支合并时,往往会有 CodeReview 流程。

基于 Master 分支创建。

Feature

功能分支 + 临时分支。有新需求时,基于最新的 Deveop 分支创建功能分支,功能开发完成时,需将代码合并到 Develop 分支。

基于 Develop 分支创建,最后合并到 Develop 分支。

  1. Tag&Branch 的区别

Tag 和 Branch 类似,都是引用或者说者指针。在工程里 .git/refs 目录下能够清楚的看到,各个 Tag 和 Branch 所指向的提交节点的 SHA-1 值。

区别:

Tag:Tag 的位置是固定的,在给指定提交打好标签以后,它就固定于此位置

Branch:Branch 的位置是会不断变动的,随着分支的向前推移或者向后回滚,都在不断变化

尽量使用 Tag,保存代码片段。

二、Git Commit 提交规范

  1. Commit Message 格式

():

<空行>

<空行>

可以看出分为三个部分,头部、主体、底部。

头部

():

type 类型,修改的类型级别:

feat:新功能(feature)

fix:修补 bug

docs:文档(documentation)

style: 格式(不影响代码运行的变动)

refactor:重构(即不是新增功能,也不是修改 bug 的代码变动)

test:增加测试

chore:构建过程或辅助工具的变动

scope 修改范围:

主要是这次修改涉及到的部分,最好简单的概括

subject 修改的副标题:

主要是具体修改的功能点

body:主要对本次 commit 的详细描述,可以分成多行。

footer:主要放置不兼容变更和 Issue 关闭的信息。

为了方便代码的快速提交,body 和 fotter 部分可以省略。

  1. 使用介绍

需求开发或者修改 Bug 时,提交代码时要添加对应 Jira 编号:

git commit -m “feat(CHESS-1217): 我的页面增加分享入口及分享功能开发”

修改 Bug 时,需要指明修改代码所在模块:

git commit -m “fix(分享): 修改修改部分手机分享大图为空问题”

没有具体模块、或者多模块代码一起提交时,可使用其他提交方式:

git commit -m “fix(BUG): 修改推送红点提示逻辑”

  1. 相关工具

Git Hook 自定义拦截脚本:commit-msg

使用环境:python3.7

使用方式:

打开工程目录下的 .git/hooks 文件夹

将 commit-msg 脚本复制到文件夹下,即可

全局设置:通过以下方式,可全局设置,每次 git clone 时,自动将 commit-msg 脚本添加到工程的 hooks 目录中:全局设置 commit-msg。

其他工具:

Commitizen:辅助撰写合格 Commit message 的工具

Commitlint:Commit message 规则校验工具

  1. 拓展

GitLab 与 Jira 关联

效果:Git Commit 时,在 message 里面添加工单号,可在 Jira 对应工单详情页查看到本次提交。

配置:官方文档。