代码git提交规范CommitLint使用
一、Commitlint 是什么
在多人协作的背景下,git 仓库和 workflow 的作用很重要。而对于 commit 提交的信息说明存在一定规范,现使用 commitlint + husky 规范 git commit -m "" 中的描述信息。
一句话说,当我们运行 git commmit -m 'xxx' 时,用来检查 xxx 是否满足固定格式的工具。
二、为什么使用 commitlint?
我们都知道,在使用 git commit 时,git 会提示我们填入此次提交的信息。
可不要小看了这些 commit,团队中规范了 commit 可以更清晰的查看每一次代码提交记录,还可以根据自定义的规则,自动生成 changeLog 文件。
三、如何使用?
1、commitlint: 安装,制定提交规范(采用默认)
npm install --save-dev @commitlint/config-conventional @commitlint/cli
2、生成配置文件commitlint.config.js,当然也可以是 .commitlintrc.js
echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js
3、husky: 还要为 git 配置 husky ,对 git 的 commit 操作进行校验。
husky继承了Git下所有的钩子,在触发钩子的时候,husky可以阻止不合法的commit,push等等
npm install husky --save-dev
4、 在 package.json 中引入 husky
// package.json
{
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
这段配置告诉了git hooks,当我们在当前项目中执行 git commit -m '测试提交' 时将触发commit-msg事件钩子并通知husky,从而执行 commitlint -E HUSKY_GIT_PARAMS命令,也就是我们刚开始安装的./node_modules/.bin/commitlint,它将读取commitlint.config.js配置规则并对我们刚刚提交的测试提交这串文字进行校验,若校验不通过,则在终端输出错误,commit终止。
四、CommitLint 提交规范
commitlint 推荐我们使用 config-conventional 配置去写 commit
提交格式(注意冒号后面有空格)
git commit -m <type>[optional scope]: <description>
type :用于表明我们这次提交的改动类型,是新增了功能?还是修改了测试代码?又或者是更新了文档?
optional scope:一个可选的修改范围。用于标识此次提交主要涉及到代码中哪个模块。
description:一句话描述此次提交的主要内容,做到言简意赅。
常用的 type 类型:其实项目团队内部也可以自定义一些类型,只要自己清楚就可以了
五、初始化@commitlint/cli的配置文件
在项目根目录创建名为commitlint.config.js的文件,代码如下:
/**
* feature:新功能
* update:更新某功能
* fixbug:修补某功能的bug
* refactor:重构某个功能
* optimize: 优化构建工具或运行时性能
* style:仅样式改动
* docs:仅文档新增/改动
* chore:构建过程或辅助工具的变动
*/
module.exports = {
extends: [
'@commitlint/config-conventional'
],
rules: {
'type-enum': [2, 'always', [
'feature', 'update', 'fixbug', 'refactor', 'optimize', 'style', 'docs', 'chore'
]],
'type-case': [0],
'type-empty': [0],
'scope-empty': [0],
'scope-case': [0],
'subject-full-stop': [0, 'never'],
'subject-case': [0, 'never'],
'header-max-length': [0, 'always', 72]
}
};
// 这些配置是什么意思?请自行查阅commitlint文档
使用 commitlint 可以规范我们每一次的 commit,我们可以用来自动生成 changeLog 等文件,方便代码管理。
具体可学习以下链接: 前端codeLint-- 为项目集成ESLint、StyleLint、commitLint实战和原理