简介
在每一个使用 git 进行版本管理的仓库,都有一个目录 .git/hooks,包含 commit 各个阶段 Hooks 的脚本。这些 Hooks 在 git 操作 commit、push、merge 等得时候,可以做前置或者后置的操作。Git 支持的常用钩子见下表,更多请查看官网Hooks:
Git Hook | 调用时机 | 调用时机 |
---|---|---|
pre-commit | git commit 执行前 | 可以用 git commit --no-verify 绕过 |
commit-msg | git commit 执行前 | 可以用 git commit --no-verify 绕过 |
pre-merge-commit | git merge 执行前 | 可以用 git merge --no-verify 绕过 |
pre-push | git push 执行前 |
当git执行hooks的时候,会将工作目录设置成项目的跟目录。
配置hooks
在 git 项目中,.git/hooks
下面有很多 hooks 示例如下
这些 git hooks 都是.sample
结尾的,如果要启用某个 hooks 用可以去掉.sample
结尾
自定义hooks路径
针对单一的工程
git config core.hooksPath "C:\Users\Desktop\hooks_dir\"
当然也可以直接全局设置
git config --global core.hooksPath "C:\Users\Desktop\hooks_dir\"
core.hooksPath的优先级比 .git/hooks下的高
hooks文件编写
1、要想拦截某次提交,我们直接让hooks的返回码非0即可
#!/bin/sh
echo "这个消息会显示,然后提交失败"
exit 1
2、获取传递的参数
#!/bin/sh
echo "你的输入为:" $(cat $1)
exit 1