常用本地钩子
pre-commit
prepare-commit-msg
commit-msg
post-commit
post-checkout
pre-rebase
前四个钩子让你介入完整的提交生命周期,后两个允许你执行一些额外的操作,分别为git checkout和git rebase的安全检查.所有带pre-的钩子允许你修改即将发生的操作,而带post-的钩子只能用于通知
pre-commit
在执行git commit命令时,git向你询问提交信息或生产提交对象时执行。pre-commit不需要任何参数,以非0状态退出时将放弃整个提交。
prepare-commit-msg
在pre-commit钩子在文本编辑器中生成提交信息之后被调用.prepare-commit-msg脚本的参数可以是下列三个:1.包含提交信息的文件名 2.提交类型 3.相关提交的SHA1哈希字串.和pre-commit一样,以非0状态退出会放弃提交
commit-msg
commit-msg钩子和prepare-commit-msg钩子很像,但它会在用户输入提交信息之后被调用.传入这个钩子唯一的参数是包含提交信息的文件名,也是以非0状态退出会放弃提交
post-commit
post-commit钩子在commit-msg钩子之后立即被运行,它无法更改git commit的结果,所以这主要用于通知用途,这个脚本没有参数,而且退出状态不会影响提交
post-checkout
post-checkout钩子和post-commit钩子很像,但它在你用git checkout查看引用的时候被调用。这个钩子接受三个参数,它的返回状态不影响git checkout命令。1.HEAD前一次提交的引用 2.新的HEAD的引用 3.1或0,分别代表是分支checkout还是文件checkout
pre-rebase
pre-rebase钩子在git rebase发生更改之前运行。他接受两个参数:1.frok之前的上游分支 2.将要rebase的下游分支。如果rebase当前分支则第二个参数为空。以非0状态退出会放弃这次rebase。
服务端钩子
pre-receive
update
post-receive
服务端钩子和本地钩子几乎一样,只不过它们存在于服务端的仓库中,这些钩子都允许你对git push的不同阶段做出响应,服务端钩子的输出会传送到客户端的控制台中,所以给开发者发送信息是很容易的
pre-receive
当运行git push向仓库推送代码时被执行,这是强制推行开发规范的好地方。这个脚本没有参数。这和其它钩子相比略微有些不同,因为信息是通过标准输入而不是命令行传入的。每一个推送上来的引用都会以下面的格式传入脚本的单独一行:
<old-value> <new-value> <ref-name>