35

エラーが発生します:

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

リモートにプッシュしようとしたとき。受信後のファイルは正しい場所 (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 に設定するとエラーは解消されますが、スクリプトは実行されません。

4

5 に答える 5

37

これは、hooks/post-receiveファイルが存在し、実行可能とマークされているが、実行できない場合に発生します。インタプリタ/bin/bash2が存在しないか、実行可能でないため、実行できません。

/bin/bash2を、存在し、サーバー上で実行可能な bashの名前に置き換えます。

(エラーがこのように見える理由は、オペレーティング システムが「そのようなファイルまたはディレクトリはありません」というエラー ステータスを返すだけで、どのファイルが存在しないかを報告しないためです。そして、それを実行しようとしたコードはそれを認識していません。システムはすでに を読み込んhooks/post-receiveで探していました/bin/bash2. 知っているのは を実行しようとしたことhooks/post-receiveだけなので、それが表示されます.

于 2012-07-24T12:39:32.277 に答える
19

さらに、(この質問に関する今後の参照とドキュメントのために)echo $SHELLシェルで実行すると、期待される結果が表示されるはずです。この場合、(承認された回答に基づいて)結果として期待/bin/bashされるはずです。しかし、もう 1 つの考えられる問題は、キャリッジ リターンが見えないことです。

hooks/post-receive問題が解決しない場合は、実行してみてください。次のような応答が返されることがあります。

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

ここで重要なのは、実際に予期しないキャリッジ リターンが返されたことを証明すること^Mです。

それを修正すると、問題が解決するはずです。その方法はdos2unix、たとえば次のように使用します。

dos2unix .htaccess
于 2014-11-05T21:43:36.493 に答える
1

正しい 775 権限があるかどうかを確認してください。

私にとっては、フォルダー構造をやり直すことで機能しました

git init --bare
于 2021-01-09T20:27:03.083 に答える
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
  • その後、予期しないキャリッジ リターンに苦しんでいることを知りましたがdos2unix、pythonanywhere では使用したくありません。
  • 受信後のファイルを pythonanywhere のエディターで開き、すべての行をクリアし、行をコピーして貼り付けるのではなく、手動で行を入力しました。
  • 繰り返しますが、bash コンソールから、自分が自分のベアレポ アプリ フォルダーにいることを十分に認識しています ( ~/bare-repos/mysite.git.
  • 行って良かった。
于 2020-01-19T00:29:48.667 に答える
0

それは私が最初に行うのを忘れたことが原因でしたgit init

于 2016-11-01T07:47:47.210 に答える