前言
当你的项目中出现如上图的commit log,你会有什么感受?乱(强迫症看着是真难受)
格式不统一,type、scope没有合理使用,空格使用不规范等等,让我们无法在短暂的时间内从commit log中看到有用的信息。
这时,我们在团队内,提出一个commit message规范issue-id type(scope): 描述内容,让大家提交时遵守这个规范。
但是我们仅仅通过人为去遵守,总是不可靠,可能多一个空格少一个空格,也看不出来。
互联网时代,就交给代码去做吧!
清晰易懂、格式统一之后的commit log,请看下图:
此文就给大家介绍一个npm包husky-hook,告别繁琐的安装和脚本开发等,只需安装即可开启校验。
husky-hook
github地址:github.com/anyblue/hus…
npm地址:www.npmjs.com/package/hus…
husky + .git/hooks/commit-msg的结合
介绍
- 基于husky(版本7.x)
- 增加校验
commit message的脚本 git commit时运行.husky/commit-msg钩子- 校验成功之后,执行
.git/hooks目录下的默认commit-msg钩子
安装
以NPM安装为例:
安装
npm install husky-hook --save-dev
开启校验
命令行运行下述命令,生成.husky目录和校验脚本:
npx husky-hook install
install后自动开启校验,请执行下方命令:
npm set-script prepare "husky-hook install"
操作完成后,你将会在项目根目录看到如下目录和文件:
使用
安装成功后,我们就可以通过git commit -m 'xxx'提交代码了。
校验不通过
将会出现如下提示:
校验通过
如果你不需要运行.git/hooks/commit-msg钩子,出现如下提示:
则修改.husky/commit-msg中的exit 1为exit 0
重新git commit -m 'xxx',即可通过校验,commit成功。
卸载
不需要时,可以按照下述命令操作,进行卸载:
npx husky-hook uninstall
npm uninstall husky-hook
遇到的问题
- 如何在使用
husky的同时,使用.git/hooks默认钩子
husky生成的钩子存储在.husky目录下,并且更改了.git/config的hooksPath = .husky,也就是说,使用了husky来处理gitHooks,那就只能执行.husky目录下的钩子脚本,执行不了.git/hooks下的脚本。
在.husky/commit-msg中手动去执行.git/hooks中的脚本,如下:
......
if [ -e .git/hooks/commit-msg ]; then
. .git/hooks/commit-msg
else
# Install custom hooks, such as using Gerrit to generate change ID
echo '\033[31m Please check and install .git/hooks/commit-msg hooks \033[0m'
exit 0
fi
- husky 5.x 以上版本与gerrit生成评审id(.git/hooks/commit-msg用gerrit来生成评审id)冲突
冲突在于获取get config get gerrit.reviewUrl时,没有设置的话,出现异常退出了。
可以通过以下脚本设置gerrit.reviewUrl为空,前提是这个值本身应该为''
git config --local gerrit.reviewUrl ''
结语
简洁清晰易懂的commit message对于项目开发来说,至关重要。
快快用起来吧!看谁还敢不好好写commit message