git post-receive hook没有运行

时间:2011-11-21 00:29:41

标签: git hook

我有一个简单的repo服务器端,我能够成功提交并从我的本地机器推送。但是,后接收挂钩未运行。详细说明:

  • 使用SSH作为协议
  • 我重新命名了标准" post-receive.sample"到"收到后#34;
  • 此文件具有-rwxr-xr-x权限
  • 该文件归拥有repo的同一用户所有,该用户是登录并推送的同一SSH用户
  • 实际推进顺利;文件已更新 - 它只是不运行的挂钩
  • 我尝试在挂钩之前和之后放置echo "Some text",但未显示(请参阅:Post Commit Hook Not Running)。
  • Hook脚本包含在下面,虽然这似乎不会导致问题
  • 在Ubuntu 10.04上使用git 1.7.0.4

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/

7 个答案:

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