Git_钩子工作原理

Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。Client端钩子被operation触发,比如commit,merge等,Server端钩子被网络动作触发,比如pushed commits。

那么钩子是放在哪的呢?
在.git/hooks/文件夹下。当你init一个仓库的时候,下边会有一些钩子的例子,以.sample结尾。

那么钩子什么时候被执行,Git预定义了触发时机:
ClientSide hooks:
1 pre-commit,当执行commit动作时先执行此hook,可以用此hook做一些检查,比如代码风格检查,或者先跑测试。
2 prepare-commit-msg, 当commit时需要输入message前会触发此hook,可以用此hook来定制自己的default message信息。
3 commit-msg,当用户输入commit的message后被触发,可以用此hook校验message的信息,比如是否符合规定,有没有cr等。
4 post-commit, 当commit完成后被触发,可以用此hook发送notification等。
5 pre-rebase, rebase之前会被触发,可以用此hook来拒绝所有的已经push的commits进行rebase操作。
6 post-merge, 当merge成功后,会触发此hook。
7 pre-push, 当push时,remote refs被更新,但是在所有的objects传输前被触发。
8 pre-auto-gc, 当git gc --auto执行前被触发。在垃圾回收之前做一些验证或备份是挺不错的。

ServerSide hooks:
1 pre-receive, 当收到push动作之前会被执行。
2 update, 也是收到push动作之前被执行,但是有可能被执行多次,每个branch一次。
3 post-receive, 当push动作已经完成的时候会被触发,可以用此hook来push notification等,比如发邮件,通知持续构建服务器等。

记住所有的hook都应该是可被执行的。
chmod u+x your_hook
所以你可以用shell脚本,perl,python等写钩子。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.什么是 Git Hooks 如同其他许多的版本控制系统一样,Git 也具有在特定事件发生之前或之后执行特定脚本...
    就叫yang阅读 3,334评论 3 11
  • 什么是Git Hooks? 话说,如同其他许多的版本控制系统一样,Git也具有在特定事件发生之前或之后执行特定脚本...
    茗涙阅读 11,459评论 0 7
  • 背景 某某你提交的代码有问题,怎么把没有验证的dev代码合并到master上去了…… 某某你提交的代码有问题,怎么...
    小黑妞_b8b9阅读 11,555评论 1 18
  • git中提供了一组hook,规定了每个hook的名字,以及hook接收的参数个数和每个参数的含义。用户如果要使用h...
    ElpieKay阅读 11,887评论 0 5
  • 出轨者的理想生活 北京时间下午四点不知道零几分,知名狗仔卓伟爆料演员陈思诚疑似出轨,具体表现为陈思诚深夜给美女开门...
    你的小美味吖阅读 345评论 0 2