Commit Lint 其实是需要搭配Husky才能实现对Git Commit Message的校验的。
Git Hooks
git hooks, 顾名思义hooks为“钩子”之意,Git预先定义了一些“事件钩子”如“commit-msg”、“pre-commit”等,当我们执行对应的Git操作时会触发它们,从而通知订阅该事件的shell script文件处理我们要进行的任务,这些shell脚本文件存放在项目根目录下的.git/hooks 目录中,如图所示:
而Husky 它会帮我们自动生成.git/hooks目录下的shell scrip, 从而实现git commit 的时候的验证。
Struct
# Header
<type>[optional scope]: <description>
# Body
[optional body]
# Footer
[optional footer(s)]
PS:
* 如果没有特别说明,所有的「:」冒号后面都要加「空格」
* 不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。(未验证)
Header
-
type的定义
## build 编译相关的修改,例如发布版本、对项目构建或者依赖的改动 ## ci 持续集成修改 ## chore 其他修改, 比如改变构建流程、或者增加依赖库、工具等 ## docs 仅文档新增/改动 ## feat 新特性、新功能 ## fix 修补某功能的bug ## perf 优化相关,比如提升性能、体验 ## refactor 重构某个功能 ## revert 回滚到上一个版本 ## style 代码格式修改, 注意不是 css 修改 ## test 测试用例修改 ## update 更新某功能 ## optimize: 优化构建工具或运行时性能
-
Scope的定义
用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
-
description
commit 目的的简短描述,
-
Sample
git commit -m 'fix(account): 修复xxx的bug'
Body
具体的描述本次修改的内容正文,可以是多行.
Footer
本次修改的脚注,针对重大修改使用「BREAKING CHANGE: 」来标记。一般只用于二种情况。
- 不兼容变动
如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。
BREAKING CHANGE: isolate scope bindings definition has changed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
}
After:
scope: {
myAttr: '@',
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
- 关闭 Issue
Closes #123, #245, #992
Sample
feat(scope): 修改了 API 协议
增加了很多不可描述的事情
删除了一些不必要的参数
BREAKING CHANGE: 修改了 API 协议
集成于项目中
1. 安装 husky
依赖
# 在项目的根路径下(即.git的所在目录)
npm install --save-dev husky
2.安装@commitlint
# 在 node_modules的同级下安装
npm install --save-dev @commitlint/config-conventional @commitlint/cli @commitlint/prompt-cli
其中@commitlint/prompt-cli依赖是可以不装的,这个时以交互模式进行提交code
3. 项目中安装husky
# 在项目的根目录(即.git的所在目录)
npx husky install
4. 生成commitlint配置文件
echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js
5. 在packag.json中添加
# 第一层级
husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
6. Add Hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'
前端项目可以配置npm命令
"commit": "git add . && commit"
以上配置结束就能用了
遇到的问题
因为本人的项目中源码
的位置跟.git
的位置不一样,所以的更改配置文件中路径,如下:
commit-msg
#!/bin/sh 该文件在husky目录下
. "$(dirname "$0")/_/husky.sh"
./Code/node_modules/.bin/commitlint --edit
commitlint.config.js
#!/ 该文件在根目录下
module.exports = {extends: ["./Code/node_modules/@commitlint/config-conventional"]};