2012-07-24 7 views
23

を私はエラーを取得:Gitリポジトリ - リモート:エラー:フック/ポスト受信を実行することはできません:そのようなファイルまたはディレクトリ

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

リモートにプッシュしようとしています。ポストreceivceファイルが正しい場所(testnew.git /フック)に存在し、含まれています

#!/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に設定すると、エラーは削除されますが、スクリプトは実行されません。

+1

シェルフック/ポスト受信から直接実行するとどうなりますか? 私の推測では、/ bin/bash2は存在しない、少なくとも普通のインタプリタではない、/ bin/bashは十分であるはずです – jolivier

答えて

27

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

/bin/bash2は、存在し、サーバー上で実行可能なbashという名前で置き換えてください。

(このようなエラーの原因は、オペレーティングシステムが「このようなファイルまたはディレクトリはありません」というエラーステータスのみを返しますが、存在しないファイルは報告されません。システムが既にhooks/post-receiveを読んでいて、/bin/bash2を探していたことを知らない。それが実行しようとしているのはhooks/post-receiveなので、それは何を印刷するのか分かっている)。 (この質問の将来の参照とドキュメント用)また

+0

これは問題でした。/bin/bashに切り替えるとうまくいきました。ありがとう。 – BobFlemming

7

あなたのシェルで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

この回答に加えて、崇高なテキストを使っているなら、View - > Line Endings - > Unixに行くことができます。 Unixを選択し、ファイルを再度保存します。 – kloddant

+0

この答えに加えて、 'find ./ -type f -exec dos2unix {} \;'を使って、現在のディレクトリ内のすべてのファイルの行末を変換します。 – naXa

0

それは、私が最初にgit initを行うには忘れによって引き起こされました。

関連する問題