在使用git hooks
的时候,我们一般会使用husky
工具,它可以使本地git hooks
变的更加的简单,我们一般会这样使用;
1、安装husky
npm install husky --save-dev
or
yarn add husky -D
2、配置husky文件
//.huskyrc.json
{
"hooks":{
"pre-commit":"npm test && npm run foo"
}
}
or
//package.json
{
"husky":{
"hooks":{
"pre-commit":"npm test && npm run foo"
}
}
}
以上就是husky配置的git 钩子,我们这里只用了pre-commit
钩子,husky
是支持所有的钩子的;有了上边的配置,在我们执行git commit
命令的时候,就会先执行husky
中配置的hooks;
以上的配置是husky
v4
版本之前的使用方法,v6
版本发布后,使用方式上有了很大的改变;可以说是它的设计发生了变化;
v6
版本已不在使用.huskyrc.js
文件,同时也不支持在package.json
文件中配置,而是使用了.husky/
目录中配置的单个git钩子;
husky为什么放弃了传统方式的配置呢
在v4
版本之前husky
为了能够运行用户在.huskyrc.json
中创建的任何钩子,它不得不将所有的钩子都安装在.git/hooks
目录中。当触发到钩子脚本的时候,每个脚本都会先检查.huskyrc.json
文件中是否有相应的钩子定义;这样的好处就是用户可以随意的添加、更新和删除钩子,所做的更改会自动的生效;缺点就是,即使没有任何东西要运行,该钩子节点也会被启动;
在当时husky
有过这样的设想,就是只启动在.huskyrc.json
文件中配置的钩子,但随后的问题就又出现了,如果改动了.huskyrc.json
文件中的钩子定义,husky
将不会自动工作,因为在.git/hooks
目录里还没有启动相应的钩子脚本,所以保证两个地方的配置同步成了一个难题;
直到2016年,Git 2.9
引进了core.hooksPath
,可以设置Git hooks
脚本的目录,这个引进也就是新版husky
改进的基础;
husky install
命令告诉Git
使用.hooks
目录作为钩子脚本目录,实际上就是修改了core.hooksPath
的值;husky add
创建了一个独立的shell
脚本
这样也就解决了启动单一的钩子脚本和所有的配置都在一个文件目录下;但是这样也就在根目录下生成了一个.hooks
目录,看起来不爽的话, 你也可以指定让.hooks
放到config
目录下;
v6版本的具体使用方法
自定配置(推荐)
husky-init
是一个一次性命令,可以在项目中快速添加husky
配置;
npx husky-init && npm isntall
上边命令会设置husky
,修改package.json
并且创建了一个可执行的pre-commit
脚本样例,当你git commit
命令式,默认会执行npm test
hooks add
添加其他hooks
npx hooks add .hooks/commit-msg 'npx --no-install commitlint --edit "$1"'
手动配置
1、 安装husky
npm install husky --save-dev
2、修改git hooks默认目录
npx husky install
3、如果想安装后自动启用hooks,请编辑package.json
{
"scripts":{
"prepare":"husky install"
}
}
yarn2不支持prepare
,可以修改为postinstall
4、创建hooks,语法:husky add <file> [cmd]
npx husky add .husky/pre-commit "npm test"
执行git commit -m "test"
命令,如果npm test
失败,将终止提交
5、卸载husky
npm uninstall husky && git config --unset core.hooksPath
其他用法
1、推荐在package.json
中添加husky,您可以使用lerna
和filter
等工具来只运行已更改包中的脚本
(1) 添加hooks
npx husky add .husky/pre-commit "npm run pre-commit"
(2) 在package.json
文件中添加pre-commit
{
"script":{
"pre-commit":"npm run test && eslint"
}
}
2、自定义.husky
目录
npx husky install .config/husky
3、绕过钩子
git commit -m "test" --no-verify
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。