仓库钩子
git仓库的.git目录的hooks文件夹下,存放git的钩子脚本,git在某些事件发生的时候,会调用钩子脚本。
以下是一个简单的例子,将提交的信息写入同文件夹的 log 文件中:
#!/bin/sh
while read oldrev newrev refname
do
echo "Ref $refname received. Commit $newrev pushed."
git log --format=%B -n 1 $newrev >> $(dirname "$0")/log.txt
done
该文件在git远程服务器端被执行,存放在仓库代码的.git/hooks/pre-receive文件中。
在客户端提交push代码的时候,新提交(commit)的注释,会输出到.git/hooks/log.txt文件中。
全局钩子
实际上,git不存在全局钩子。所谓的git的全局钩子,不过是~/.git-templates/hooks目录中的模板钩子。
它们本身并不起作用。要让全局钩子脚本起作用,您需要在~/.gitconfig文件中设置init.templatedir变量。
这个变量应该指向包含您的全局钩子脚本的目录。
例如,如果您的全局钩子脚本位于~/.git-templates/hooks目录下,那么您可以通过运行以下命令来设置init.templatedir变量:
git config --global init.templatedir '~/.git-templates'
这将使Git在每次运行git init命令时从~/.git-templates目录中复制默认模板。
这样,您的全局钩子脚本就会被复制到新仓库中。