2011-04-17 11 views
33

私はトラブルポストレシーブ、ポストコミットフックはmsysgitで正しく動作するようになって(Windowsのを持っています7 Pro/32およびUltimate/64)を使用します。コミット後のフックについては、git-bashまたはコンソールのいずれかからコミットすると上記のエラーが出ますが、git-guiをコミットするとうまく動作します。ポスト受信フックの場合、3つとも同じエラーが発生します。msysgitエラー:「gitのエラー:コミット後/ .git /フックを起動することはできません:そのようなファイルやディレクトリはありません」

私はこれが何らかの許可またはパスエラーであると考えていますが、ここから始めるのは実際には何の手がかりもありません。

答えて

62

はそうのように、フックの最初の行にシェバングを追加します。

#!/bin/sh 
echo "executing post-commit" 
exit 0 

これは私が同様にしばらく困惑し、私はそれを修正シェバングを追加することを見ていました。 SVNの世界では、* nixでは "pre-commit"スクリプトがあり、Windowsでは "pre-commit.bat"があり、SVNは自動的にWindowsのbatファイルを取得しました。 Gitはpre-commit.bat(または任意のフック)をピックアップして、フックファイルにシバンを追加していないようです。

+1

そして、彼は非常に最初の行を意味します。私は誤ってトップに空の改行があり、同じエラーが発生していました。 – jeef3

+0

フックファイルもASCIIコード化されていなければなりません。ユニコード形式のフックファイルを生成するツールがありました。 – mamidon

+0

また、FYI:私のシステムでは、私はperlシバンとフックを持っていました。しかし、perl.exeはパスにありませんでした。 env変数に追加した後、エラーは消えました。 – Fildor

3

あなたはシェバングを持っており、それはまだ失敗した場合は、PATH環境変数に<path_to_git> \ binに設定していることを確認してください。

あなたはおそらくもあるでしょう<path_to_git> \ cmdのコマンドラインから動作するようにそれをインストールした場合。

2

これは、古い質問ですが、私はこの正確な問題と戦ってきたし、これはSOポップアップので、私は私のために働いていたものを記録するための努力、それは価値があると思った疑問。

Local Systemではなく、Apacheを通常のユーザーとして実行する必要がありました。それだけでWindows XPを実行していたので、これは、私が遊んでいたレガシーテスト​​にあったが、それは、少なくともそのプラットフォーム上で表示されます(そしておそらく他の人)、Local Systemアカウントで実行している場合msysgitだけで正常に動作しない(おそらくroot filesystemが正しくマップされていません)。その結果、git-http-backendは単にmsysgitバイナリを実行することができず(絶対Windowsのパスでも)シバンラインは動作しません。

Apacheを通常のユーザーアカウントとして実行すると、この問題は完全に解決されました。明らかに、ユーザーApacheがread/writegitリポジトリへのアクセス許可を持っていることを確認する必要がありますが、それ以上の場合は、shebang行が#!/bin/shであり、すべてがcopaceticであることを確認してください。

最後に、これは大きなハンマーです。理想的にはWindowssuexecのようなものを使用できますが、すぐにgooglingは前方に明白な経路を示していません。もちろん、誰かがアイデアを持っているなら、私は興味があります。

今のところこれは私にとってはうまくいくが、理想的ではないようだ。

+0

私は問題が確かにあなたのパスに \ binを持っていると信じています。私は通常のユーザーアカウントを使用し、同じエラーが発生しました。一度私はパスのビンを持って、私は問題なく通常のユーザーアカウントまたはローカルシステムとして実行することができます。あなたの場合、通常のユーザーアカウントでのみパスを設定している可能性があります。 –

+0

私はApacheがこのすべてに適合するところが不思議です。それは私のワークフローの一部ではありませんが、それ以外のすべての症状が一致します。 Gitは私の地球環境PATH( 'C:\ Program Files(x86)\ Git \ bin'と' .. \ cmd')にあります。私は何かを誤解していますか? – Barney

2

誰かが、私のようにApache経由のgitリポジトリにアクセスすると、同様の問題に遭遇した場合、あなたは同様に、Apacheの設定でPATHを設定する必要があります。

SetEnv PATH "c:/Program Files (x86)/Git/bin;" 
+0

ありがとう@Xmister。これをhttpd.confに追加しました。これがこの問題に対処しているようです。 – tjg184

4

私はSourceTreeとGitのLFSを使用していましたよ同様の問題:cannot spawn .git/hooks/pre-push。ファイルを削除して(ひどく破損していることが判明した)、SourceTreeを再起動してpre-pushファイルを再生成し、すべて正常に戻りました。

関連する問題