1 约定式提交
1.1 约定式提交规范
文档:约定式提交
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
-------- 翻译 -------------
<类型>[可选 范围]: <描述>
[可选 正文]
[可选 脚注]
1.2 Commitizen (git cz)
文档:commitizen - npm。git 提交规范化工具
-
全局安装
Commitizen
npm install -g commitizen@4.2.4
-
安装并配置
cz-customizable
插件-
使用
npm
下载cz-customizable
npm i cz-customizable@6.3.0 --save-dev
-
添加以下配置到
package.json
中... "config": { "commitizen": { "path": "node_modules/cz-customizable" } }
-
-
项目根目录下创建
.cz-config.js
自定义提示文件module.exports = { // 可选类型 types: [ { value: 'feat', name: 'feat: 新功能' }, { value: 'fix', name: 'fix: 修复' }, { value: 'docs', name: 'docs: 文档变更' }, { value: 'style', name: 'style: 代码格式(不影响代码运行的变动)' }, { value: 'refactor', name: 'refactor: 重构(既不是增加feature,也不是修复bug)' }, { value: 'perf', name: 'perf: 性能优化' }, { value: 'test', name: 'test: 增加测试' }, { value: 'chore', name: 'chore: 构建过程或辅助工具的变动' }, { value: 'revert', name: 'revert: 回退' }, { value: 'build', name: 'build: 打包' } ], // 消息步骤 messages: { type: '请选择提交类型:', customScope: '请输入修改范围(可选):', subject: '请简要描述提交(必填):', body: '请输入详细描述(可选):', footer: '请输入要关闭的issue(可选):', confirmCommit: '确认使用以上信息提交?(y/n/e/h)' }, // 跳过问题 skipQuestions: ['body', 'footer'], // subject文字长度默认是72 subjectLimit: 72 }
-
使用
git cz
代替git commit
2 git提交规范 (git commit)
2.1 commitlint
commitlint:用于检查提交信息
-
安装依赖:
npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4
-
创建
commitlint.config.js
文件echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
-
打开
commitlint.config.js
, 增加配置项( config-conventional 默认配置点击可查看 ):module.exports = { // 继承的规则 extends: ['@commitlint/config-conventional'], // 定义规则类型 rules: { // type 类型定义,表示 git 提交的 type 必须在以下类型范围内 'type-enum': [ 2, 'always', [ 'feat', // 新功能 feature 'fix', // 修复 bug 'docs', // 文档注释 'style', // 代码格式(不影响代码运行的变动) 'refactor', // 重构(既不增加新功能,也不是修复bug) 'perf', // 性能优化 'test', // 增加测试 'chore', // 构建过程或辅助工具的变动 'revert', // 回退 'build' // 打包 ] ], // subject 大小写不做校验 'subject-case': [0] } }
注意:确保保存为 UTF-8
的编码格式,否则可能会出现以下错误:
2.2 husky
husky:是
git hooks
工具Git hooks:Git - githooks Documentation
git
在执行某个事件之前或之后进行一些其他额外的操作
commit-msg
:可以用来规范化标准格式,并且可以按需指定是否要拒绝本次提交
pre-commit
:会在提交前被调用,并且可以按需指定是否要拒绝本次提交
-
安装依赖:
npm install husky@7.0.1 --save-dev
-
启动
hooks
, 生成.husky
文件夹npx husky install
3.在 package.json
中生成 prepare
指令( 需要 npm > 7.0 版本 )
npm set-script prepare "husky install"
4.执行 prepare
指令
npm run prepare
5.执行成功,提示
6. 添加 commitlint
的 hook
到 husky
中,并指令在 commit-msg
的 hooks
下执行 npx --no-install commitlint --edit "$1"
指令
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
7.此时的 .husky
的文件结构
至此, 不符合规范的 commit 将不再可提交:
PS F:\xxxxxxxxxxxxxxxxxxxxx\imooc-admin> git commit -m "测试"
⧗ input: 测试
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]
✖ found 2 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
husky - commit-msg hook exited with code 1 (error)