You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git post-receive服务器钩子未执行问题及解决步骤咨询

解决Git服务器端post-receive钩子不执行的问题

别着急,服务器端钩子不执行的问题大多是权限、命名或者路径这类基础配置问题,咱们一步步排查:

  • 检查钩子文件的可执行权限:Git要求钩子文件必须具备可执行权限才能运行。登录到服务器,进入钩子所在目录,执行:

    chmod +x post-receive
    

    执行完后用ls -l post-receive确认权限,应该能看到类似-rwxr-xr-x的权限标识(包含可执行的x位)。

  • 确认钩子文件命名准确:文件名必须是post-receive,不能带任何后缀(比如.sh、.sample)。如果是从默认的post-receive.sample复制过来的,一定要删掉.sample后缀——Git只会识别无后缀的钩子文件。

  • 添加脚本解释器的shebang行:如果你的钩子是shell脚本,第一行必须指定解释器,比如:

    #!/bin/sh
    

    没有这一行,服务器不知道用什么程序来执行你的脚本,自然不会运行。

  • 验证钩子是否真的没执行(而非输出没显示):本地push时,服务器钩子的输出不一定会直接回显到本地控制台。可以在钩子里加一行输出到服务器的日志文件测试:

    echo "post-receive钩子已执行" >> /tmp/git_hook_debug.log
    

    执行push后,去服务器查看/tmp/git_hook_debug.log是否有内容,这样能区分是钩子没执行,还是输出没传到本地。

  • 确认钩子的存放路径(针对裸仓库):如果服务器上的仓库是--bare类型(远程推送仓库一般都是裸仓库),钩子目录不在.git/hooks里,而是直接在仓库根目录的hooks文件夹下。比如你的远程仓库路径是/home/git/myrepo.git,那钩子应该放在/home/git/myrepo.git/hooks/post-receive,而不是里面的.git/hooks(裸仓库没有.git子目录)。

  • 检查用户权限与系统日志:执行钩子的是Git服务器运行的用户(比如git用户),要确保这个用户对post-receive文件有读和执行权限。另外可以查看服务器的系统日志(比如/var/log/syslog或者用journalctl),看有没有钩子执行失败的错误提示;本地push时也可以加GIT_TRACE=1 git push,获取更详细的推送过程日志。

内容的提问来源于stack exchange,提问作者Prashanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:18:52