发布提交挂钩未运行

时间:2011-02-22 21:21:06

标签: git bash github post-commit githooks

我的帖子提交挂钩在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,所以我不确定为什么它不起作用。

4 个答案:

答案 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