我有一个简单的repo服务器端,我能够成功提交并从我的本地机器推送。但是,后接收挂钩未运行。详细说明:
-rwxr-xr-x
权限echo "Some text"
,但未显示(请参阅:Post Commit Hook Not Running)。
user@server:/home/repos/project1/hooks# cat post-receive
#!/bin/sh
echo "Hook is running..."
export GIT_WORK_TREE=/home/web/project1/www/
git checkout -f
rm -rf /home/web/project1/www/temp/
答案 0 :(得分:58)
为了运行Git钩子,它需要设置权限以允许它可执行。如果一个钩子似乎没有运行check the permissions,并确保它是可执行的。如果不是,你可以使所有钩子像这样执行:
chmod ug+x .git/hooks/*
...或者如果你想制作一个钩子(例如。post-receive
)可执行文件:
chmod ug+x .git/hooks/post-receive
(感谢this post)
答案 1 :(得分:20)
我有这个问题。我的脚本文件名中有拼写错误。
收到后收据而不是收到后
答案 2 :(得分:13)
问题与文件系统的安装有关。分区安装为noexec
,因此无法执行任何文件。这导致钩子不能运行。我删除了noexec
标志,现在它运行正常。
答案 3 :(得分:3)
如果代码库中有没有更改,GIT似乎不会运行收到后挂钩。
就我而言,
post hook未执行,但“push”操作仍然返回以下消息。
一切都是最新的
所以我刚刚在我的代码中创建了一个空文件,然后提交然后推送到远程。 收到后挂钩被执行的地方。
答案 4 :(得分:1)
我使用了 MacBook,这对我的情况有所帮助:
bsearch
答案 5 :(得分:0)
在Centos 6系统上,我遇到了同样的问题,事实证明SELinux阻止了钩子脚本的运行。将 httpd_git_script_t 转换为允许的域对此有所帮助(因为“ sesearch -A -s httpd_git_script_t -p exec”什么都没有产生,即,没有允许在httpd_git_script_t域中运行的进程具有exec权限):
semanage permissive -a httpd_git_script_t
答案 6 :(得分:-3)
你确定它没有运行吗?它必须运行,你只是看不到它。我的猜测是,在执行时没有为你的ssh会话设置stdout,所以你永远不会看到你的回声输出。该链接建议在本地测试,而不是通过ssh。