受信後およびコミット後のフックをmsysgit(Windows 7 Pro/32およびUltimate/64)で正しく動作させるのに問題があります。コミット後のフックでは、git-bashまたはコンソールのいずれかからコミットすると上記のエラーが発生しますが、git-guiを使用してコミットすると正常に動作します。受信後フックの場合、3つすべてで同じエラーが発生します。
私はこれが何らかの許可またはパスエラーであると考えていますが、実際にここから始める手がかりはありません。
次のように、Shebangをフックの最初の行に追加します。
#!/bin/sh
echo "executing post-commit"
exit 0
これにはしばらく困惑していましたが、シバンを追加するとそれが修正されたことがわかりました。 SVNの世界では、* nixには「pre-commit」スクリプトがあり、Windowsには「pre-commit.bat」があり、SVNはWindowsでbatファイルを自動的に取得しました。 Gitはpre-commit.bat(またはフック)を取得していないようで、フックファイルへのシバンの追加は機能しました。
SourceTreeとgit LFSを使用していますが、同様の問題がありました:cannot spawn .git/hooks/pre-Push
。
修正はpre-Push
ファイルを削除し(それを開くとひどく破損していることが明らかになった)、SourceTreeを再起動してpre-Push
ファイルを再生成し、すべてが正常に戻ります。
Shebangがあり、それでも失敗する場合は、パス環境変数に<path_to_git>
\binが設定されていることを確認してください。
コマンドラインから動作するようにインストールした場合は、おそらく<path_to_git>
\cmdもあります。
これは古い質問ですが、私はこの正確な問題と戦っていて、このSOの質問が出てきたので、私にとってうまくいったことを記録するのに努力する価値があると思いました。
つまり、Local System
の代わりにApache
を通常のユーザーとして実行する必要がありました。これはレガシテストVM
を使用していたため、Windows XP
のみを実行していましたが、少なくともそのプラットフォーム(およびおそらく他のプラットフォーム)では、msysgit
Local System
アカウントで実行している場合、正しく機能しません(おそらくroot filesystem
が適切にマッピングされていません)。その結果、git-http-backendはmsysgitバイナリを実行できない(絶対Windows
パスであっても)ため、Shebang行は機能しません。
Apacheを通常のユーザーアカウントとして実行するように切り替えると、この問題は完全に修正されました。明らかに、Apacheがread
/write
git
リポジトリへのアクセス許可を持っているとして実行していることを確認する必要がありますが、それを超えて、Shebang
行は#!/bin/sh
であり、すべてが適切でなければなりません。
最後に、ええ、これは大きなハンマーです。 suexec
でWindows
のようなものを使用できるのが理想ですが、簡単なgoogling
は明確な先への道を示していません。もちろん、誰かがアイデアを持っているなら、私は興味があります。
今のところ、これは私には有効ですが、理想的とは思えません。
私のような誰かがApache経由でgitリポジトリにアクセスする際に同様の問題に遭遇した場合、Apache configでPATHを次のように設定する必要があります。
SetEnv PATH "c:/Program Files (x86)/Git/bin;"
私にとって、シバンの行の前にあるコメント行を削除すると、エラーが修正されました。奇妙なことに、スクリプトはシェルから正常に実行され、フックとして実行するとエラーが発生しました。
TortoisegitとLFSを使用して、私は.git/hooksフォルダー内のファイルを削除するだけでした。