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

时间:2012-07-24 12:01:43

标签: git

我收到错误:

remote: error: cannot run hooks/post-receive: No such file or directory

尝试推送到远程时。 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

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

chmod a+x post-receive

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

5 个答案:

答案 0 :(得分:31)

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

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

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

答案 1 :(得分:15)

此外(有关此问题的未来参考和文档)如果您在shell中运行echo $SHELL,您应该会看到预期结果,在本例中为(基于已批准的答案)您希望/bin/bash作为结果。但另一个可能的问题可能是看不见的回车

如果您仍然遇到问题,请尝试运行hooks/post-receive,您可能会收到这样的回复:

-bash: hooks/post-receive: /bin/bash^M: bad interpreter: No such file or directory

这里的关键是^M 证明您实际上是在获得意外的回车,否则如果它有效,您可能会得到一个悬而未决的回复。

修复它,它应该解决您的问题。要做到这一点,请使用dos2unix,例如:

dos2unix .htaccess

答案 2 :(得分:1)

检查您是否拥有正确的 775 权限。

对我来说,它通过重做文件夹结构来工作

git init --bare

答案 3 :(得分:0)

这是由于我忘记先git init造成的。

答案 4 :(得分:0)

尽管这个问题是几年前提出的,但是我觉得我可以为将来的读者添加我的解决方案。 就我自己而言,以下步骤解决了该问题:

  • 我确定自己已完成git init --bare
  • 从我的bash控制台运行了which bash,然后我发现#!/bin/bash就足够了
  • 在bash控制台上,
  • 完全知道我在我的裸仓库应用程序文件夹中(相当于~/bare-repos/mysite.git,我运行hooks/post-receive来查看它是否运行良好。得到了bash: hooks/post-receive: /bin/bash^M: bad interpreter: No such file or directory
  • 然后,我知道我正遭受意外的回车之苦,但是我不想在pythonanywhere中使用dos2unix
  • 我在pythonanywhere的编辑器中打开了接收后文件,清除了所有行,并手动键入了该行,而不是复制和粘贴这些行。
  • 再次,从bash控制台完全知道我在我的裸仓库应用程序文件夹中(相当于~/bare-repos/mysite.git,我运行了hooks / post-receive以查看是否工作正常。 ,未引发任何错误。
  • 我很好走。