Git Hooks

Git Hooks

git通过hooks来定制行为,所有的hooks存储在hooks目录,客户端是.git/hooks目录。
git init的时候会在.git/hooks目录生成很多示例hook,只要重命名文件就能启用。

hook分为

  • 客户端hook
  • 服务端hook

客户端hook不会被克隆,如果要强制实现某个git策略,需要用服务端hook。

客户端hook

客户端hook在工程目录下运行
客户端hook又可以分为

  • committing-workflow
  • email-workflow
  • 其他

committing-workflow

  • pre-commit

    第一个运行的hook,在创建提交message之前就运行。
    返回非0则终止提交,但是可以用git commit --no-verify来跳过检查。
    可以在这个hook中运行测试,检查代码格式,做代码静态检查等。

  • prepare-commit-msg

    在默认commit message创建之后,打开message编辑器之前运行。
    会传入几个参数:当前消息文件路径、commit类型,如果是amend提交再加上commit的SHA-1。
    一般用来生成自动提交的信息。

  • commit-msg

    编辑完提交消息之后运行。
    传入一个参数:保存用户提交消息的临时文件的路径。
    返回非0终止提交。
    一般用来验证消息格式。

  • post-commit

    提交完成之后运行。
    一般用来做提交通知。

email-workflow hooks

通过git am命令调用,如果你需要通过email来接收patch,可能会用到这个类型的hook。

其他

  • pre-rebase

    rebase之前运行。
    返回非0终止rebase。

  • post-rewrite

    git commit --amendgit rebase会触发这个hook。
    传入参数:触发hook的命令。

  • post-checkout

    checkout成功之后运行。

  • post-merge

    merge成功之后运行。

  • pre-push

    remote ref更新之后,传输对象之前运行。
    返回非0终止push。
    传入参数:远端的名称和地址。

  • pre-auto-gc

    git gc --auto触发。

服务端hook

服务端hook在服务器的工程.git目录下运行

  • pre-receive

    服务端接收push第一个运行的hook,从stdin接收被push过来的references。
    返回非0则终止push。

  • update

    类似pre-receive,但是每个分支运行一次。
    传入三个参数:分支名、前一个commit的SHA-1,当前push的SHA-1
    返回非0则终止push。

  • post-receive

    所有流程完成之后运行。
    跟pre-receive一样从stdin传入references。
    客户端等待这个脚本完成才断开连接。

reference

https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
https://docs.gitlab.com/ee/administration/custom_hooks.html

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2015-2024 RivenZoo
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信