4

WindowsホストにGitサーバーをセットアップしています。最新のApacheをインストールし、msysGitで動作させました。私はSSHをまったく使用していません。HTTPをプッシュおよびプルできます。

次に、受信後フックを追加してビルドサーバーに通知したいのですが、その方法がわかりません。サーバーのリポジトリにサンプルのフックスクリプトがありますが、そこで何をすべきか混乱しています。そこに、という名前のWindowsバッチファイルを置くpost-receive.batか、それとも何か他のことをしますか?

これがすべて何をしているのか詳細については少しあいまいですが、ApacheはGit URLを検出すると、c:\ Program Files \ git \ libexec \ git-core\git-http-backend.exeを実行しています。git-http-backend.exeは受信後のフックをトリガーしますか?

更新 私は近づいています。hooks/post-receiveこれが私のレポのフックです:

#!/c/Program Files/Git/bin/sh
curl http://mybuildserver:8080/job/Whazzup/build

#!/bin/shWindowsにはないので、シェバンを変更しました。これで、Apacheエラーログに次のメッセージが表示されますerror: cannot spawn hooks/post-receive: No such file or directory

ちなみに、Gitbashchmodは機能していないようです。しかし、サンプルファイルの名前を変更することで、許可を得ることができましたpost-receiverwxr-xr-x

更新 シバンの行をに戻しました#!/bin/shが、Apacheエラーログに同じエラーが表示されますerror: cannot spawn hooks/post-receive: No such file or directory。テストとして、hooksフォルダーでGit bashプロンプトを開き、でフックを実行すると./post-receive、機能しました。

今すぐ更新 私は別の問題があるかどうか疑問に思っています。VonCのアドバイスを受けて、LocalSystemのサービスとしてではなく、自分のアカウントでコマンドラインからApachehttpdを実行してみました。それでも同じこと。プッシュとプルは正常に機能しますが、フックは実行されません。次に、Apacheを方程式から外してみました。リポジトリと同じコンピューター上のGitbashプロンプトから、(ファイルシステムを介して)クローンを作成し、変更、コミット、およびプッシュしました。しかし、フックはまだ実行されませんでした。

更新 OK、フックスクリプトにばかげた問題がありましたが、少なくとも同じコンピューターから(ファイルシステムを介して)リポジトリにプッシュすると実行されます。しかし、Apacheをプッシュするときはそうではありません。現在、Apacheは通常のアカウントで実行されており、Apacheアカウントがリポジトリを完全に制御します。プッシュは正常に機能しますが、受信後のフックは実行されません。

4

1 に答える 1

3

ApacheはGitURLを検出すると実行c:\Program Files\git\libexec\git-core\git-http-backend.exeされます。git-http-backend.exeポストレシーブフックをトリガーしますか?

cloneいいえ、コマンド( 、、)を自分自身pushに渡します。フック はプッシュが完了した後に実行され、「 Windowsの受信後フック-GIT_WORK_DIR:そのようなファイルまたはディレクトリはありません」に示すようにbash(unixシェル)スクリプトです。pullgit
post-receive

(リポジトリ内で)そのスクリプトを作成できる場所については、 「 gitwindowspostpull」も参照してください。リポジトリの前にあるhttpApacheサービスとは何の関係もありません。post-receive.git/hooks


「フック/ポスト受信を生成できません:そのようなファイルまたはディレクトリはありません」というエラーメッセージについては、「フック付きのmsysgitエラー:」gitエラー:.git / hooks / post-commitを生成できません:そのようなファイルまたはディレクトリはありません" ":

  • シェバンは#!/bin/sh
  • Apacheは、ローカルシステムではなく通常のユーザーとして実行する必要があります。これは、通常のユーザーに対して定義された環境変数を利用するためです。
  • <path_to_git>\binにある必要がありますPATH
于 2012-11-09T18:17:57.783 に答える