Git - remote:错误:无法运行hooks/post-receive:没有这样的文件或目录

Bob*_*ing 32 git

我收到错误:

remote: error: cannot run hooks/post-receive: No such file or directory
Run Code Online (Sandbox Code Playgroud)

当试图推送到远程.post-receivce文件存在于正确的位置(testnew.git/hooks)并包含:

#!/bin/bash2
export GIT_DIR=/var/www/testnew/testnew/.git/
export GIT_WORK_TREE=/var/www/testnew/testnew/
cd /var/www/testnew/testnew/

echo "here we go..."
git fetch
git merge origin/master
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方式设置接收后的权限:

chmod a+x post-receive
Run Code Online (Sandbox Code Playgroud)

但这会产生同样的错误.将权限设置为755会删除错误,但脚本不会运行.

Jan*_*dec 31

如果hooks/post-receive文件存在,标记为可执行但无法执行,则会发生这种情况.它无法执行,因为解释/bin/bash2器不存在或不可执行.

替换/bin/bash2存在且在服务器上可执行的bash的名称.

(错误看起来像是这样,操作系统只返回错误状态,"没有这样的文件或目录",但不报告哪个文件不存在.并且试图执行它的代码不知道系统已经读过hooks/post-receive并且正在寻找/bin/bash2.它只知道是它试图运行hooks/post-receive,所以这就是打印的内容).


Xtr*_*ith 17

此外(有关此问题的未来参考和文档)如果您要echo $SHELL在shell中运行,您应该会看到预期的结果,在这种情况下(基于批准的答案),您期望得到/bin/bash结果.但另一个可能的问题可能是看不见的回车.

hooks/post-receive如果您仍然遇到问题,请尝试运行,您可能会得到如下响应:

-bash: hooks/post-receive: /bin/bash^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这里的关键^M证明你实际上得到了一个意想不到的回车,否则如果它有效,你可能会得到一个悬而未决的回应.

修复它,它应该解决你的问题.这样做的方法,使用dos2unix,例如:

dos2unix .htaccess
Run Code Online (Sandbox Code Playgroud)

  • 添加到这个答案,如果你使用Sublime Text,你可以进入View - > Line Endings - > Unix.选择Unix,然后再次保存文件. (4认同)