Git Hooks 的实现其实非常简单,就是就 .git/hooks 目录下保存了一些 shell 脚本,然后在对应的钩子(时间点)中执行这些脚本

常见 hook 表格:

Git Hook调用时机说明
pre-applypatchgit am 执行前
applypatch-msggit am 执行前
post-applypatchgit am 执行后不影响 git am 的结果
pre-commitgit commit 执行前可以用 git commit —no-verify 绕过
commit-msggit commit 执行前可以用 git commit —no-verify 绕过
post-commitgit commit 执行后不影响 git commit 的结果
pre-merge-commitgit merge 执行前可以用 git merge —no-verify 绕过。
prepare-commit-msggit commit 执行后,编辑器打开之前
pre-rebasegit rebase 执行前
post-checkoutgit checkout 或 git switch 执行后如果不使用—no-checkout 参数,则在 git clone 之后也会执行。
post-mergegit commit 执行后在执行 git pull 时也会被调用
pre-pushgit push 执行前
pre-receivegit-receive-pack 执行前
update
post-receivegit-receive-pack 执行后不影响 git-receive-pack 的结果
post-update当 git-receive-pack 对 git push 作出反应并更新仓库中的引用时
push-to-checkout当 git-receive-pack 对 git push 做出反应并更新仓库中的引用时
以及当推送试图更新当前被签出的分支且 receive.denyCurrentBranch 配置被设置为 updateInstead 时
pre-auto-gcgit gc —auto 执行前
post-rewrite执行 git commit —amend 或 git rebase 时
sendemail-validategit send-email 执行前
fsmonitor-watchman配置 core.fsmonitor 被设置为.git/hooks/fsmonitor-watchman 或.git/hooks/fsmonitor-watchmanv2 时
p4-pre-submitgit-p4 submit 执行前可以用 git-p4 submit —no-verify 绕过
p4-prepare-changelistgit-p4 submit 执行后,编辑器启动前可以用 git-p4 submit —no-verify 绕过
p4-changelistgit-p4 submit 执行并编辑完 changelist message 后可以用 git-p4 submit —no-verify 绕过
p4-post-changelistgit-p4 submit 执行后
post-index-change索引被写入到 read-cache.c do_write_locked_index 后