前言
在团队多人开发中,规范的commit message可以快速定位代码提交历史,回溯问题根源,方便组内多人协作,提高团队效率。
注: husky 6.0.0 版本发生了破坏性变更,下述方案使用的是 7.0.1 版本husky,对于低于 6.0.0 版本不适用,低于7.0.1 版本husky也可能存在问题。
husky
husky,是一个为 git 客户端增加 hook 的工具。安装后,它会自动在仓库中的 .git/ 目录下增加相应的钩子;比如 pre-commit 钩子就会在你执行 git commit 的触发。我们可以在 pre-commit 中实现一些比如 lint 检查、单元测试、代码美化等操作。当然,pre-commit 阶段执行的命令当然要保证其速度不要太慢,每次 commit 等很久体验不好。
安装与配置
1.安装husky
1 | npm i husky -D |
2.配置 package.json
在项目根目录中找到package.json
,并在scripts
对象中增加prepare
脚本
1 | "scripts": { |
3.执行prepare脚本
1 | npm run prepare |
执行husky install
命令时,该命令会创建.husky/
目录并指定该目录为git hooks
所在的目录。
若执行失败,或生成失败请注意改项目是否绑定git仓库,或是否已git init,没有绑定仓库或没初始化仓库则会失败
多层级项目,外层关联git的将会无效,需将项目独立出去,单独一个git仓库
4.添加git pre-commit hooks
执行git commit命令时会先触发pre-commit这个脚本
注意:npm run lint 命令根据你自己项目中script脚本而定,eslint –ext .js,.vue src在lint脚本中
运行以下命令,创建git hooks
1 | npx husky add .husky/pre-commit "npm run lint" |
若提示Usage,则看以下步骤
1 | // 运行此命令 |
此时你会发现在项目更目录的.husky
文件夹下会创建一个pre-commit
文件,打开该文件,将文件中的undefined
替换为npm run lint
5.添加git commit-msg hooks
commit-msg钩子是来规范我们的commit message信息
1 | npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"' |
若提示Usage,则看以下步骤
1 | // 运行此命令 |
此时你会发现在项目更目录的.husky
文件夹下会创建一个commit-msg
文件,打开该文件,将文件中的undefined
替换为npx --no-install commitlint --edit "$1"
commitlint
commitlint是什么: 当我们运行 git commmit -m ‘xxx’ 时,用来检查 xxx 是否满足固定格式的工具。
为什么使用commitlint:团队中规范了 commit 规范可以更清晰的查看每一次代码提交记录,还可以根据自定义的规则,自动生成 changeLog 文件。
1.安装
1 | npm install @commitlint/config-conventional @commitlint/cli -D |
- @commitlint/cli 是commitlint提供的命令行工具,安装后会将cli脚本放置在./node_modules/.bin/目录下
- @commitlint/config-conventional 是社区中一些共享的配置,我们可以扩展这些配置,也可以不安装这个包自定义配置
代码提交基本格式为:<type>(scope?): <subject>
type: 用于表明我们这次提交的改动类型,是新增了功能?还是修改了测试代码?又或者是更新了文档?
scope: 一个可选的修改范围。用于标识此次提交主要涉及到代码中哪个模块。
Subject: 一句话描述此次提交的主要内容,做到言简意赅
type
常用类别
类型 | 描述 |
---|---|
ci | 持续集成修改 |
docs | 文档修改 |
feat | 新特性、新功能 |
fix | 修改bug |
perf | 优化相关,比如提升性能、体验 |
refactor | 代码重构 |
revert | 回滚到上一个版本 |
style | 代码格式修改, 注意不是 css 修改 |
test | 测试用例修改 |
build | 编译相关的修改,例如发布版本、对项目构建或者依赖的改动 |
chore | 其他修改, 比如改变构建流程、或者增加依赖库、工具等 |
update | 普通更新 |
- 使用方式
1 | git commit -m 'feat: 增加 xxx 功能' |
配置commitlint.config.js
在项目根目录创建名为commitlint.config.js的文件,代码如下:
1 | // rule由name和配置数组组成,如:'name: [0, 'always', 72]',数组中第一位表示level,可选0,1,2,0为disable,1为warning,2为error,第二位表示是否应用,可选always|never,第三位表示该rule的值。 |
- 如果commit message的格式不符合上述要求,则会报错,检查不通过
1 | ✔ Preparing... |
VsCode Commit Message Editor 插件
这是一款VsCode 中为了规范 git Commit 提交的一个插件,极大方便在husky + commitlint 限制下,快速总结出当前修改类型
安装
cz-customizable
既然写的骚,那就贯彻到底咯,我们添加cz-customizable,通过npm 命令来生成commit,就不用每次按commit规范来提交代码了,直接通过选择更方便也更直视
1.安装依赖
1 | npm install -D commitizen cz-conventional-changelog @commitlint/config-conventional @commitlint/cli husky |
2.配置package.json
package.json
中scripts
增加"commit": "git-cz"
如下
1 | { |
3. 使用命令 npm run commit
4. 自定义提示文案
- 依赖安装bash
1
npm install -D commitizen cz-conventional-changelog @commitlint/config-conventional @commitlint/cli commitlint-config-cz cz-customizable husky
package.json
中config
增加commitizen.path: "node_modules/cz-customizable"
bash1
2
3
4
5
6
7...
"config": {
"commitizen": {
"path": "node_modules/cz-customizable"
}
},
...
commitlint.config.js
中extends
增加cz
1 | { |
5.配置.cz-config.js
1 | module.exports = { |