Git - 钩子

77 阅读2分钟

Git 钩子

Git 能在特定的重要动作发生时触发自定义脚本。

有两组这样的钩子:

  • 客户端钩子:由诸如提交和合并这样的操作所调用
  • 服务器端钩子: 作用于诸如接收被推送的提交这样的联网操作

Git 钩子简介

Git 钩子一般被存储在 .git/hooks 目录下。

当使用 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。它们都是以 .sample 结尾,如果想启用它们,得先移除这个后缀。

示例都是 shell 脚本,其中一些还混杂了 Perl 代码,不过,任何正确命名的可执行脚本都可以正常使用 —— 你可以用 Ruby 或 Python,或任何你熟悉的语言编写它们。

一个正确命名(不带扩展名)且可执行的文件放入 .git 目录下的 hooks 子目录中,即可激活该钩子脚本。这样一来,它就能被 Git 调用。

客户端钩子

需要注意的是:克隆某个版本库时,它的客户端钩子并不随同复制。如果需要靠这些脚本来强制维持某种策略,建议服务器端实现这一功能。

pre-commit(常用)

在键入提交信息前运行。作用:检查即将提交的快照。

如果该钩子以非零值退出,Git 将放弃此次提交,不过你可以用 git commit --no-verify 来绕过这个环节。可以利用该钩子,来检查代码风格是否一致(运行类似 lint 的程序)、尾随空白字符是否存在(自带的钩子就是这么做的)

prepare-commit-msg

钩子在启动提交信息编辑器之前,默认信息被创建之后运行。

它允许你编辑提交者所看到的默认信息。 该钩子接收一些选项:存有当前提交信息的文件的路径、提交类型和修补提交的提交的 SHA-1 校验。 它对一般的提交来说并没有什么用;然而对那些会自动产生默认信息的提交,如提交信息模板、合并提交、压缩提交和修订提交等非常实用。 你可以结合提交模板来使用它,动态地插入信息。

commit-msg(常用)

用来在提交通过前验证项目状态或提交信息。

如果该钩子脚本以非零值退出,Git 将放弃提交

post-commit

钩子在整个提交过程完成后运行。一般用于通知之类的事情。

服务端钩子(待补充)