git钩子介绍

常用本地钩子

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>
常见的应用包含:1.拒绝将上游分支rebase的更改 2.防止错综复杂的合并(非快速向前,会造成项目历史非线性) 3.检查用户是否有正确的权限来做这些更改(大多用于中心化的Git工作流中) 4.如果多个引用被推送,在pre-receive中返回非0状态,拒绝所有提交

update

update钩子在pre-receive之后被调用,用法也差不多。在更新前被调用,但它可以分别被每个推送上来的引用分别调用。也就是说如果用户尝试推送到4个分支,update会被执行4次。和pre-receive不一样,这个钩子不需要读取标准输入。事实上,它接受三个参数:1.更新的引用名称 2.引用中存放的旧的对象名称 3.引用中存放的新的对象名称

post-receive

成功推送后被调用,适合用于发送通知.这个脚本没有参数,但和pre-receive一样通过标准输入读取
坚持原创技术分享,您的支持将鼓励我继续创作!