49

我的 post commit 钩子在 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

4 回答 4

211

我将把它留在这里作为答案,因为当的 post-commit 钩子没有运行时,我偶然发现了自己的答案:

chmod +x .git/hooks/post-commit

可能适用于任何类型的钩子。事实上,可能适用于任何类型的脚本。

于 2013-01-08T05:40:26.753 回答
30

尝试在 perl 行之前和之后放置一些 echo 行,如下所示:

echo "post-commit started"
perl ...........
echo "post-commit finished"

这样你就可以确认脚本是否真的在运行,因为当你运行时

git commit

你应该看到

post-commit started
post-commit finished

接近你的输出。

于 2011-02-22T21:33:11.793 回答
24

我的提交后脚本没有被调用,因为:

我已经命名了脚本post-commit.sh,而不仅仅是post-commit.

要启用挂钩脚本,请将文件放在 .git 目录的 hooks 子目录中,该文件具有适当的名称(没有任何扩展名)并且是可执行的。从那时起,它应该被调用。我们将在这里介绍大多数主要的钩子文件名。见 git-scm

不知道为什么我脑子里想钩子需要 bash 文件扩展名。

我也没有意识到钩子脚本不能有文件扩展名。例如,

如果你想使用捆绑的钩子脚本,你必须重命名它们;它们的文件名都以 .sample 结尾

希望这可以帮助某人。

于 2016-12-07T20:57:51.517 回答
0

除了这里提到的答案,请注意,如果您希望用户在您的钩子中输入,您需要像这样将标准输入重定向到键盘(至少对于 bash 脚本);

exec < /dev/tty
于 2019-09-24T19:44:00.827 回答