2020你应该知道的Git Commit规范

简介: 2020你应该知道的Git Commit规范

微信图片_20220520195523.png


一. 概述


Git是现在市面上最流行的版本控制工具,我们在每次提交代码时,都需要编写Commit Message,否则是不允许提交的。书写良好的Commit Message能大大提高代码维护的效率。避免开发人员在项目中张扬个性,搞得代码一团糟,好好的项目就被糟践了。不管是开发还是日后维护,都将是灾难。因此,编写Commit Message需要遵循一定的范式,内容应该清晰明了,指明本次提交的目的,便于日后追踪问题。但是在日常开发中由于缺少对Commit Message的约束,导致填写内容随意、质量参差不齐,可读性低亦难以维护。今天小编就带大家一起来学习下Commit Message约束,希望对大家的工作有所帮助,如果大家觉得好的话,不要忘记给小编点个赞

二. 目的


  • 统一团队 Git commit 日志标准,便于后续代码 review,版本发布以及日志自动化生成等等。
  • 统一团队的 Git 工作流,包括分支使用、tag 规范、issue 等。
  • 提供更多的信息,方便排查与回退。
  • 过滤关键字,迅速定位。
  • 方便生成文档。

三. 规范


3.1 Commit Message 的格式


每次提交,Commit Message 都包括三个部分:Header,Body 和 Footer。

讲解引导:

  • type
  • scope
  • body
  • break changes
  • affect issues

提交规范:

# EN
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
# CH
<类型>[可选的作用域]: <描述>
// 空一行
[可选的正文]
// 空一行
[可选的脚注]

提交说明:

# 标题行:50个字符以内,描述主要变更内容
#
# 主体内容:更详细的说明文本,建议72个字符以内。 需要描述的信息包括:
#
# * 为什么这个变更是必须的? 它可能是用来修复一个bug,增加一个feature,提升性能、可靠性、稳定性等等
# * 他如何解决这个问题? 具体描述解决问题的步骤
# * 是否存在副作用、风险? 
#
# 尾部:如果需要的化可以添加一个链接到issue地址或者其它文档,或者关闭某个issue。

提交样例:

fix: correct minor typos in code
see the issue for details
on typos fixed.
Reviewed-by: Z
Refs #133


3.1.1 Header


Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。


3.1.1.1 type


type为必填项,用于指定commit的类型,约定了featfix两个主要type,以及docsstylerefactortestchore、五个特殊type其余type扩充buildperfcirevert,也可以根据公司特殊要求做对应的扩展。

主要:

  • feat:新功能(feature)
  • fix:修复bug

特殊:

  • docs:文档(documentation),只改动了文档相关的内容
  • style:格式(不影响代码含义的改动,例如去掉空格、改变缩进、增删分号)
  • refactor:重构(代码重构时使用、不是新增功能,也不是修改bug的代码变动,代码重构,未新增任何功能和修复任何bug)
  • test:添加测试或者修改现有测试
  • chore:构建过程或辅助工具的变动、不修改src或者test的其余修改

扩充:

  • build:改变构建流程,新增依赖库、工具、构造工具的或者外部依赖的改动,例如webpack,npm
  • perf:提高性能的改动
  • ci:自动化流程配置修改、与CI(持续集成服务)有关的改动
  • revert:回滚到上一个版本,执行git revert打印的message


3.1.1.2  scope


scope也为必填项,用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同,格式为项目名/模块名。

例如:

fedesign-cli/common模块删除通用头部组件,而每个页面头部不同。建议分开独立开发,不需要引用统一头部组件。


3.1.1.3 subject


subject是 commit 目的的简短描述,不超过50个字符。

填写要求:

  1. 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
  2. 第一个字母小写
  3. 结尾不加句号(.)

3.1.1.4 提交示例


fix: correct minor typos in code
see the issue for details
on typos fixed.
Reviewed-by: Z
Refs #133


3.1.2 Body


Body 填写详细描述,主要描述改动之前的情况修改动机,对于小的修改不作要求,但是重大需求、更新等必须添加body来作说,可以分成多行。


3.1.2.1 填写要求


  1. 使用第一人称现在时,比如使用change而不是changed或changes。
  2. 应该说明代码变动的动机,以及与以前行为的对比。


3.1.2.2 提交示例


fix: correct minor typos in code
see the issue for details
on typos fixed.
Reviewed-by: Z
Refs #133

3.1.3 Footer


3.1.3.1 不兼容变动(break changes)


break changes指明是否产生了破坏性修改,涉及break changes的改动必须指明该项,类似版本升级、接口参数减少、接口删除、迁移等。


3.1.3.2 关闭 Issue(affect issues)


affect issues指明是否影响了某个问题。例如我们使用jira时,我们在commit message中可以填写其影响的JIRA_ID,若要开启该功能需要先打通jiragitlab

四. Git分支与版本发布规范


4.1 基本原则


master为保护分支,不直接在master上进行代码修改和提交。


4.2 分支命名规范


开发从master分支上checkout一个feature分支进行开发或者fix分支进行bug修复,功能测试完毕并且项目发布上线后,将feature分支合并到主干master,并且打tag发布,最后删除开发分支

  • 分支版本命名规则:分支类型 _ 分支发布时间 _ 分支功能。例如:feat_20201122_login
  • 分支类型包括:feat、 fix、refactor三种类型,即新功能开发、bug修复和代码重构
  • 时间使用年月日进行命名,不足2位补0
  • 分支功能命名使用snake case命名法,即下划线命名

五. 工具集成


Commitizen是一个格式化commit message的工具。它的安装需要NPM的支持,NPM是Node.js的包管理工具,所以首先安装node.js,下载对应系统的包,安装即可。


5.1 validate-commit-msg  插件


validate-commit-msg 是基于Node 的一款检查Commit message 插件, 来检查项目中 Commit message 是否规范。


5.1.1 安装


$ npm install --save-dev validate-commit-msg
# OR
$ yarn add --save-dev validate-commit-msg


5.1.2 配置


  1. 使用方式一
    创建 .vcmrc 文件
{
  "types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"],
  "scope": {
    "required": false,
    "allowed": ["*"],
    "validate": false,
    "multiple": false
  },
  "warnOnFail": false,
  "maxSubjectLength": 100,
  "subjectPattern": ".+",
  "subjectPatternErrorMsg": "subject does not match subject pattern!",
  "helpMessage": "",
  "autoFix": false
}
  1. 使用方式二
    写入 package.json
{
  "config": {
    "validate-commit-msg": {
      /* your config here */
    }
  }
}


5.2 commitizen插件


5.2.1 安装


$ npm install -g commitizen
# OR
$ yarn global add commitizen

5.2.2 使用



  1. 在项目根目录下运行命令
$ commitizen init cz-conventional-changelog --save --save-exact
  1. 运行完以上一律使用git cz 代替git commit来提交代码,同时会显示一下选项来自动生成符合格式的commit message.

5.3 changelog插件


changelog是生成changelog的工具,在安装之前请确保安装Nodecommitizen

5.3.1 安装

$ npm install -g conventional-changelog 
#OR  
$ yarn global add conventional-changelog
$ npm install -g conventional-changelog-cli 
#OR  
$ yarn global add conventional-changelog-cli


5.3.2 使用



  1. 执行以下指令检验上面两个工具是否安装成功
$ npm ls -g -depth=0
  1. 运行下面命令,使其支持Angular的Commit message格式
commitizen init cz-conventional-changelog --save --save-exact

注意: 因为commitizen工具是基于Node.js的


5.4 Vscode 集成


  1. 首先我们需要去 Vscode 插件市场搜索 git-commit-plugin 并且进行安装。
  2. 安装完之后可以使用组合键 Command + Shift + P 呼出 指令行,并键入指令 show git commit template 或者点击 git 插件栏上的小图标唤醒插件界面。
  3. 根据自己当前提交所要表达的意义,选择对应的 type 类型去编写 commit 信息。



目录
相关文章
|
2月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
147 4
|
2月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
242 3
|
3月前
|
消息中间件 小程序 Java
【规范】看看人家Git提交描述,那叫一个规矩
本文通过IDEA中的Git描述规范插件【git commit message helper】,介绍了Git提交描述的规范流程,强调了团队开发中统一标准的重要性,并通过实例展示了规范的提交记录如何提高代码管理和维护效率。最后,文章提供了几个实用的Git提交描述案例,帮助读者更好地理解和应用这些规范。
68 0
【规范】看看人家Git提交描述,那叫一个规矩
|
3月前
|
敏捷开发 小程序 持续交付
【规范】Git分支管理,看看我司是咋整的
本文介绍了Git分支管理规范的重要性及其在企业中的应用。通过规范化的分支管理,可加速团队协作、确保代码质量、维护主分支稳定,并支持敏捷开发。文中详细描述了主分支(如master、develop)和辅助分支(如feature、hotfix)的作用,并提供了实际开发流程示例,包括开发前、开发中、提测、预生产和部署上线等阶段的操作方法。旨在帮助团队提高效率和代码质量。
171 0
【规范】Git分支管理,看看我司是咋整的
|
3月前
|
开发工具 git
Git——commit的提交规范
Git——commit的提交规范
102 4
|
3月前
|
JavaScript 测试技术 开发工具
Git 分支设计规范
Git 分支设计规范
191 11
|
3月前
|
测试技术 持续交付 开发工具
[译] 为何每次 Git Commit 要尽可能小?
[译] 为何每次 Git Commit 要尽可能小?
|
3月前
|
Java 开发工具 Android开发
Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息
本文介绍了在Android Studio项目中通过修改`build.gradle`脚本来自动获取并添加Git的commit ID、branch名称和用户信息到BuildConfig类中,从而实现在编译时将这些版本信息加入到APK中的方法。
71 0
|
4月前
|
前端开发 JavaScript 开发工具
前端优化之路:git commit 校验拦截
前面在git分支规范那篇文章里,介绍了commit提交规范,但是想要做到高效落地执行,就需要做些别的功课。
|
3月前
|
存储 测试技术 开发工具
企业Git 规范的必要性-阿里云开发者社区
既然认同需要一份 Git 规范,那么这个规范需要规范哪些内容,解决哪些问题。