钩子都被存储在 Git 目录下的 hooks 子目录中。所有的示例都是 shell 脚本,其中一些还混杂了 Perl 代码,不过,任何正确命名的可执行脚本都可以正常使用 —— 你可以用 Ruby 或 Python,或任何你熟悉的语言编写它们。 这些示例的名字都是以 .sample 结尾,如果你想启用它们,得先移除这个后缀。
提交工作流钩子
- pre-commit: 在提交信息前运行。用于检查即将提交的快照。如果该钩子以 非零值 退出,Git 将放弃此次提交(可以用- git commit --no-verify来绕过)。
- prepare-commit-msg: 启动提交信息编辑器之前,默认信息被创建之后运行。该钩子接受:存有当前提交信息的文件的路径、提交类型和修补提交的提交的 SHA-1 校验。
- commit-msg: 接受存有当前提交信息的临时文件的路径,如果该钩子以 非零值 退出,Git 将放弃此次提交。
- post-commit:整个提交过程完成后运行。- 电子邮件工作流钩子
- applyaptch-msg: 在- git am运行之前调用。接受包含请求合并信息的临时文件的名字。如果该钩子以 非零值 退出,Git 将放弃该补丁。
- pre-applypatch: 该钩子运行于应用补丁 之后,产生提交之前。如果该钩子以 非零值 退出,该补丁不会提交。
- post-applypatch: 运行于提交产生之后。- 其他钩子
- pre-rebase: 运行于变基之前。如果该钩子以 非零值 退出,Git 将放弃此次变基。
- post-rewrite: 被那些会替换提交记录的命令调用,比如- git commit --amend和- git rebase。接受触发重写的命令名,同时从标准输入中接受一系列重写的提交记录。
- post-checkout: 在- git checkout成功后运行
- post-merge: 在- git merge成功后运行
- pre-push: 在- git push运行期间, 更新了远程引用但尚未传送对象时被调用。接受远程分支的名字和位置作为参数,同时从标准输入中读取一系列待更新的引用。一个非零的退出码将终止推送过程。
- pre-auto-gc: 在垃圾回收(- git gc --auto)开始之前被调用- 服务器钩子
- pre-receive: 来自客户端的推送操作时被调用。它从标准输入获取一系列被推送的引用。如果它以 非零值 退出,所有的推送内容都不会被接受。
- update: 和- pre-receive脚本十分类似,不同之处在于它会为每一个准备更新的分支各运行一次。它不会从标准输入读取内容,而是接受三个参数:被推送的引用的名字(分支),推送前的引用指向的内容的 SHA-1 值,以及用户准备推送的内容的 SHA-1 值。 如果 update 脚本以非零值退出,只有相应的那一个引用会被拒绝;其余的依然会被更新。
- post-receive: 在客户端的推送完成后被调用,它接受与- pre-receive相同的标准输入数据。
 
                         
                                

