web-dev-qa-db-ja.com

フックでのmsysgitエラー:「gitエラー:.git / hooks / post-commitを生成できません:そのようなファイルまたはディレクトリはありません」

受信後およびコミット後のフックをmsysgit(Windows 7 Pro/32およびUltimate/64)で正しく動作させるのに問題があります。コミット後のフックでは、git-bashまたはコンソールのいずれかからコミットすると上記のエラーが発生しますが、git-guiを使用してコミットすると正常に動作します。受信後フックの場合、3つすべてで同じエラーが発生します。

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

43
Matt

次のように、Shebangをフックの最初の行に追加します。

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

これにはしばらく困惑していましたが、シバンを追加するとそれが修正されたことがわかりました。 SVNの世界では、* nixには「pre-commit」スクリプトがあり、Windowsには「pre-commit.bat」があり、SVNはWindowsでbatファイルを自動的に取得しました。 Gitはpre-commit.bat(またはフック)を取得していないようで、フックファイルへのシバンの追加は機能しました。

77
manojlds

SourceTreeとgit LFSを使用していますが、同様の問題がありました:cannot spawn .git/hooks/pre-Push

修正はpre-Pushファイルを削除し(それを開くとひどく破損していることが明らかになった)、SourceTreeを再起動してpre-Pushファイルを再生成し、すべてが正常に戻ります。

7
Jarrod Smith

Shebangがあり、それでも失敗する場合は、パス環境変数に<path_to_git>\binが設定されていることを確認してください。

コマンドラインから動作するようにインストールした場合は、おそらく<path_to_git>\cmdもあります。

6
Nick Robson

これは古い質問ですが、私はこの正確な問題と戦っていて、このSOの質問が出てきたので、私にとってうまくいったことを記録するのに努力する価値があると思いました。

つまり、Local Systemの代わりにApacheを通常のユーザーとして実行する必要がありました。これはレガシテストVMを使用していたため、Windows XPのみを実行していましたが、少なくともそのプラットフォーム(およびおそらく他のプラットフォーム)では、msysgitLocal Systemアカウントで実行している場合、正しく機能しません(おそらくroot filesystemが適切にマッピングされていません)。その結果、git-http-backendはmsysgitバイナリを実行できない(絶対Windowsパスであっても)ため、Shebang行は機能しません。

Apacheを通常のユーザーアカウントとして実行するように切り替えると、この問題は完全に修正されました。明らかに、Apacheがread/writegitリポジトリへのアクセス許可を持っているとして実行していることを確認する必要がありますが、それを超えて、Shebang行は#!/bin/shであり、すべてが適切でなければなりません。

最後に、ええ、これは大きなハンマーです。 suexecWindowsのようなものを使用できるのが理想ですが、簡単なgooglingは明確な先への道を示していません。もちろん、誰かがアイデアを持っているなら、私は興味があります。

今のところ、これは私には有効ですが、理想的とは思えません。

3
user1630539

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

SetEnv PATH "c:/Program Files (x86)/Git/bin;"
2
Xmister

私にとって、シバンの行の前にあるコメント行を削除すると、エラーが修正されました。奇妙なことに、スクリプトはシェルから正常に実行され、フックとして実行するとエラーが発生しました。

0
T Corman

TortoisegitとLFSを使用して、私は.git/hooksフォルダー内のファイルを削除するだけでした。

0
Justin Hirsch