一. 什么是 Git Hooks
如同其他许多的版本控制系统一样,Git也具有在特定事件发生之前或之后执行特定脚本代码功能。
Git Hooks就是那些在Git执行特定事件(如commit、push、receive等)后触发运行的脚本。
按照Git Hooks脚本所在的位置可以分为两类:
1.本地Hooks,触发事件如commit、merge等。
2.服务端Hooks,触发事件如receive等。
钩子都被存储在项目的 .git(是隐藏目录) 目录下的 hooks
子目录中,即项目中的 .git/hooks
文件夹中。
当你用 git init
初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。 这些脚本除了本身可以被调用外,它们还透露了被触发时所传入的参数。 所有的示例都是 shell 脚本,其中一些还混杂了 Perl 代码,不过,任何正确命名的可执行脚本都可以正常使用 —— 你可以用 Ruby 或 Python,或任何你熟悉的语言编写它们。 这些示例的名字都是以 .sample
结尾,如果你想启用它们,得先移除这个后缀。
把一个正确命名(不带扩展名)且可执行的文件(如 pre-commit 或
pre-push)放入 .git
目录下的 hooks
子目录中,即可激活该钩子脚本。 这样一来,它就能被 Git 调用。
常用的两个钩子是 pre-commit
和 pre-push 。
二. 在 git commit 前执行 eslint 检查 js 文件,检查通过才可继续
安装 husky:
cnpm i -D husky
安装 lint-staged:
cnpm i -D lint-staged
package.json 文件:
{
"scripts": {
"precommit": "lint-staged"
},
"husky": {
"hooks": {
"pre-commit": "npm run precommit"
}
},
"lint-staged": {
"*.js": [
"eslint",
"git add"
]
}
}
此时尝试 git commit 代码,如果 eslint 检查未执行,则还需 在项目根目录下的 .git / hooks 中添加文件 pre-commit:
#!/bin/sh
npm run precommit
并执行如下命令,赋予 pre-commit 文件执行权限:
chomd +x pre-commit
这时候,再尝试 git commit 代码,就能正常执行 eslint 检查了,且检查通过之后会执行 git add;检查不通过则停止动作。
这就阻止了不规范代码的提交。
本文 完。