1、背景


在多人协作项目中,如果代码风格统一、代码提交信息的说明准确,那么在后期协作以及Bug处理时会更加方便。

先来介绍本人公司采用的commit规范

Commit message格式

<type>: <subject>

注意冒号后面有空格。

type

用于说明 commit 的类别,只允许使用下面7个标识。

  • feat:新功能(feature)
  • fix:修补bug
  • docs:文档(documentation)
  • style: 格式(不影响代码运行的变动)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • test:增加测试
  • chore:构建过程或辅助工具的变动

如果type为featfix,则该 commit 将肯定出现在 Change log 之中。

subject

subject是 commit 目的的简短描述,不超过50个字符,且结尾不加句号(.)。

 

注意

type    和    subject 之前有个英文冒号以及个空格!


2.在本文章中,我会介绍怎么使用下面这个工具,在git push 代码之前检测commit messages

  1. commitlint        https://marionebl.github.io/commitlint/#/
  2. husky              https://github.com/typicode/husky

3、使用工具校验commit是否符合规范

3.1 全局安装(这步很重要)
npm install -g @commitlint/cli @commitlint/config-conventional

项目没有package.json的话,要连忙 [npm | cnpm] init -y
 
 
 
4
 
 
 
 
 
1
npm install -g @commitlint/cli @commitlint/config-conventional
2

3

4
项目没有package.json的话,要连忙 [npm | cnpm] init -y
 
 
3.2 生成配置配件

这个文件在根目录下生成就可以了。

echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
 
 
 
1
 
 
 
 
 
1
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
 
 
3.3 在commitlint.config.js制定提交message规范
"module.exports = {extends: ['@commitlint/config-conventional']}"

module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [2, 'always', [
"feat", "fix", "docs", "style", "refactor", "test", "chore", "revert"
]],
'subject-full-stop': [0, 'never'],
'subject-case': [0, 'never']
}
};
 
 
 
12
 
 
 
 
 
1
"module.exports = {extends: ['@commitlint/config-conventional']}"
2

3
module.exports = {
4
  extends: ['@commitlint/config-conventional'],
5
  rules: {
6
    'type-enum': [2, 'always', [
7
      "feat", "fix", "docs", "style", "refactor", "test", "chore", "revert"
8
    ]],
9
    'subject-full-stop': [0, 'never'],
10
    'subject-case': [0, 'never']
11
  }
12
};
 
 

上面我们就完成了commitlint的安装与提交规范的制定。检验commit message的最佳方式是结合git hook,所以需要配合Husky

3.4 husky介绍


husky继承了Git下所有的钩子,在触发钩子的时候,husky可以阻止不合法的commit,push等等。注意使用husky之前,必须先将代码放到git 仓库中,否则本地没有.git文件,就没有地方去继承钩子了。

npm install husky --save-dev
 
 
 
1
 
 
 
 
 
1
npm install husky --save-dev
 
 

安装成功后需要在项目下的package.json中配置:

注意配置的最新,旧版本github把它的包干掉了,下载不了!

最新版本的配置(当前为v1.0.1版本,持续更新中):
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
} 以下为0.14.3版本时的配置
"scripts": {
"commitmsg": "commitlint -e $GIT_PARAMS", },
"config": {
"commitizen": {
"path": "cz-customizable"
}
},
 
 
 
19
 
 
 
 
 
1
最新版本的配置(当前为v1.0.1版本,持续更新中):
2
"husky": {
3
   "hooks": {
4
     "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
5
    }
6
  }
7

8

9

10
以下为0.14.3版本时的配置
11
"scripts": {
12
    "commitmsg": "commitlint -e $GIT_PARAMS",
13

14
 },
15
 "config": {
16
    "commitizen": {
17
      "path": "cz-customizable"
18
    }
19
  },
 
 

最后我们可以正常的git操作

git add .
 
 
 
1
 
 
 
 
 
1
git add .
 
 

git commit的时候会触发commlint。下面演示下不符合规范提交示例:

F:\accesscontrol\access_control>git commit -m "featdf: aas"
husky > npm run -s commitmsg (node v8.2.1) ⧗ input:
featdf: aas ✖ type must be one of [feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert] [type-enum]
✖ found 1 problems, 0 warnings husky > commit-msg hook failed (add --no-verify to bypass) F:\accesscontrol\access_control>
 
 
 
12
 
 
 
 
 
1
F:\accesscontrol\access_control>git commit -m "featdf: aas"
2
husky > npm run -s commitmsg (node v8.2.1)
3

4
⧗   input:
5
featdf: aas
6

7
✖   type must be one of [feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert] [type-enum]
8
✖   found 1 problems, 0 warnings
9

10
husky > commit-msg hook failed (add --no-verify to bypass)
11

12
F:\accesscontrol\access_control>
 
 

上面message不符合提交规范,所以会提示错误。

我们修改下type

F:\accesscontrol\access_control>git commit -m "feat: 新功能"
husky > npm run -s commitmsg (node v8.2.1) ⧗ input: feat: 新功能
✔ found 0 problems, 0 warnings [develop 7a20657] feat: 新功能
1 file changed, 1 insertion(+) F:\accesscontrol\access_control>
 
 
 
10
 
 
 
 
 
1
F:\accesscontrol\access_control>git commit -m "feat: 新功能"
2
husky > npm run -s commitmsg (node v8.2.1)
3

4
⧗   input: feat: 新功能
5
✔   found 0 problems, 0 warnings
6

7
[develop 7a20657] feat: 新功能
8
 1 file changed, 1 insertion(+)
9

10
F:\accesscontrol\access_control>
 
 

commit成功。

3.5 husky的钩子

可以在package.json下面添加如下的钩子。

"husky": {
"hooks": {
"pre-commit": "npm run lint"
}
},
 
 
 
5
 
 
 
 
 
1
"husky": {
2
    "hooks": {
3
      "pre-commit": "npm run lint"
4
    }
5
  },
 
 

4、最后总结过程中遇到一些问题

    1. git commit后可能报错相关‘regenerator-runtime’模块找不到;解决方式:npm install regenerator-runtime –save。
    2. git commit -m “messge”,用双引号
    3. commit不上去,你先按这篇博客的步骤仔细检查一下,是不是哪里顺序错了或者漏了。还出错就去看看文章让安装的依赖是不是又更新了
文章原链接: https://blog.csdn.net/y491887095/article/details/80594043    (稍微补充了下本人踩的坑!)

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

git的commit规范及强制校验的更多相关文章

  1. git & Angular git commit 规范

    git & Angular git commit 规范 https://github.com/angular/angular/commits/master https://github.com ...

  2. Git常用命令和Git团队使用规范指南

    转自:https://wsgzao.github.io/post/git/ 前言 在2005年的某一天,Linux之父Linus Torvalds 发布了他的又一个里程碑作品——Git.它的出现改变了 ...

  3. 您必须知道的 Git 分支开发规范

    Git 是目前最流行的源代码管理工具. 为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作. 分支管理 分支命名 master 分支 master 为主分 ...

  4. 前端项目git操作命名规范和协作开发流程

    前言 一个项目的分支,一般包括主干 master 和 开发分支 dev,以及若干临时分支 分支命名规范 分支: 命名: 说明: 主分支 master 主分支,所有提供给用户使用的正式版本,都在这个主分 ...

  5. git 分支命名规范

    为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作. 主要规范两点: git 分支命名规范 git 提交记录规范 1. git 分支命名规范 git 分支 ...

  6. Git 分支开发规范

    您必须知道的 Git 分支开发规范 Git 是目前最流行的源代码管理工具. 为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作. 分支管理 分支命名 ma ...

  7. Git提交代码规范 而且规范的Git提交历史,还可以直接生成项目发版的CHANGELOG(semantic-release)

    Git提交代码规范 - 木之子梦之蝶 - 博客园 https://www.cnblogs.com/liumengdie/p/7885210.html Commit message 的格式 Git 每次 ...

  8. Git 日志提交规范

    Commit messages的基本语法 当前业界应用的比较广泛的是 Angular Git Commit Guidelines 具体格式为: <type>: <subject> ...

  9. [git] 细说commit (git add/commit/diff/rm/reset 以及 index 的概念)

    http://kasicass.blog.163.com/blog/static/39561920133294219374/ 创建测试仓库 $ git init $ echo "line o ...

随机推荐

  1. 通过html()的方法获取文本内容, form表单组件显示的值与获取到的值不一致的问题

    我在通过 html()获取对应节点的内容,发现一个问题,获取到的 form表单组件的内容值是初始加载的值,而不是经过用户修改后的值.例如页面加载时组件<input type="text ...

  2. EA添加时序图

    在项目浏览器的空白处右击 http://blog.csdn.net/craftsman1970/article/details/70877530 不同于大部分面向对象或者UML的书籍,在讨论完类图/对 ...

  3. AngularJs解决表达式闪烁的问题(ng-cloak)

    举例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  4. JavaWeb学习笔记(五)—— request

    一.request概述 request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在客户端发出每个请求时,服务 ...

  5. C++_基础4-分支语句和逻辑运算符

    这一部分截取自<C++ Primer Plus>,内容比较简单,很多只取了一些主题关键词,有空再补充: 设计智能程序的一个关键是使程序具有决策能力. 前面一种方式是循环——程序决定是否继续 ...

  6. POJ_1862 Stripies 【贪心】

    一.题面 POJ1862 二.分析 反省一下,自己英语水平着实不行,该题其实就是问若给出若干个这种生物,根据这种体重变换方式,最终合并成一个后,体重最少是多少.根据公式 $m = 2\sqrt{m_{ ...

  7. [转] 你并不需要Underscore/Lodash

    [From] https://segmentfault.com/a/1190000004460234 Lodash 和 Underscore 是非常优秀的当代JavaScript的工具集合框架,它们被 ...

  8. python 函数的递归

    递归:简单来说就是自己调用自己 这里我们又要举个例子来说明递归能做的事情. 例一: 现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁. 你想知道alex多大,你是不是还 ...

  9. 设计模式学习总结(六)原型模式(Prototype)

    原型模式即通过对象拷贝的方式来实现对同类对象的生成的一种设计模式! 浅复制:对于值类型,则直接复制该值,对于引用类型的字段则是对其引用的复制,如果原引用与现引用只要有一个的值发生变化,则都会造成两者值 ...

  10. oracle 控制文件损坏处理

    一, 故障模拟 控制文件损坏 发现关闭不了 强制关闭   故障恢复   发现已经执行到mont阶段,因为这个不依靠控制文件 进入整段日志 cd /u01/app/oracle/diag/rdbms/o ...