我的帖子提交挂钩在git之后没有运行。我已经验证了如果我从终端运行它,钩子确实有效。钩子中的代码是:
#!/bin/sh
#.git/hooks/post-commit
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".
perl -pi -e 's/([a-f0-9]+)$/'$( git rev-parse HEAD )/ ../../config/commit.git
我确实将文件重命名为./.git/hooks/中的post-commit,权限为-rwxr-x-r-x
,所以我不确定为什么它不起作用。
答案 0 :(得分:178)
我会把这个留在这里作为答案,因为我在我的提交后挂钩未运行时偶然发现了我自己的答案:
chmod +x .git/hooks/post-commit
可能适用于任何类型的钩子。 实际上,可能适用于任何类型的脚本。
答案 1 :(得分:26)
尝试在perl行之前和之后放置一些回声线,如下所示:
echo "post-commit started"
perl ...........
echo "post-commit finished"
通过这种方式,您可以确认脚本是否实际正在运行,因为当您运行
时git commit
你应该看到
post-commit started
post-commit finished
接近输出结束。
答案 2 :(得分:15)
我的提交后脚本没有被调用,因为:
我已将脚本命名为post-commit.sh
,而非post-commit
。
要启用钩子脚本,请将文件放在.git目录的hooks子目录中,该目录名称相应(没有任何扩展名)并且是可执行的。从那时起,它应该被称为。我们将在这里介绍大多数主要的钩子文件名。 See git-scm
我不知道为什么我的脑子里有钩子需要bash文件扩展名。
我也没有意识到钩子脚本不能有文件扩展名。例如,
如果要使用捆绑的钩子脚本,则必须重命名 他们;他们的文件名都以.sample
结尾
希望这有助于某人。
答案 3 :(得分:0)
除了此处指出的答案外,请注意,如果您希望钩子中有用户输入,则需要像这样将标准输入重定向到键盘(至少对于bash脚本而言);
exec < /dev/tty