2017-10-18 9 views
0

git-http-backendを使用してスマートHTTPを設定しようとしています。私はこれを行う方法について多くのドキュメンテーション/ガイドオンラインに従おうとしました。私はC:\reposについてはGitスマートHTTPプロトコルがプッシュ時にサーバー側のフックを実行できない

SetEnv GIT_PROJECT_ROOT c:/repos 
SetEnv GIT_HTTP_EXPORT_ALL 

ScriptAlias /git/ "c:/program files/git/mingw64/libexec/git-core/git-http-backend.exe/" 

<LocationMatch "^/git/.*/git.*$"> 
    Require all granted 
</LocationMatch> 

<Directory "c:/program files/git/mingw64/libexec/git-core/"> 
    <Files "git-http-backend.exe"> 
     Require all granted 
    </Files> 
</Directory> 

を持っている私のhttpd.confでのWindows 7上のApache 2.4を実行しています、私は誰もがフルアクセスを持っていることを確認しました。私は自分のユーザアカウントでhttpd.exeを実行しているので、サーバへのリクエストはPATH上でgit 2.12.2が正常に表示されるはずです。

C:\reposには、foo.gitという裸のレポがあります。そのレポの中で私はgit config http.receivepack trueをやる。私はhttp://localhost/git/foo.gitでうまくクローンすることができました。 サーバ側のフックを有効にしないで、を使用して、コミットをプッシュすることができました。

今迷惑な部分 - 私は、次のものが含まれているだけでC:\repos\foo.git\hooks\updateあるupdateフックを作成します。

#!/bin/bash 
echo foo 
exit 0 

私は、地元のレポからプッシュしようとすると、

Counting objects: 3, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (3/3), 315 bytes | 315.00 KiB/s, done. 
Total 3 (delta 0), reused 0 (delta 0) 
To http://localhost/git/foo.git 
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to 'http://localhost/git/foo.git' 

は、[OK]を取得私は同じことをgitプロトコルでプッシュしようとします - 私はgit daemon --reuseaddr --base-path=C:\repos C:\reposを実行します。それでの中にgit-daemon-export-okを入れます。私は戻って地元のレポに行くとgit:///foo.gitにプッシュ:

Counting objects: 3, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (3/3), 315 bytes | 35.00 KiB/s, done. 
Total 3 (delta 0), reused 0 (delta 0) 
remote: foo 
To git:///foo.git 
    3b33593..6af841c master -> master 

すべてが大丈夫になります。私はファイルプロトコル - file:///c/repos/foo.gitを押して、それも大丈夫です。

私はそれがアクセスの問題とは何の関係もなかったことを確認するために私のhttpd.confの

<Directory c:/> 
    Require all granted 
</Directory> 

をやってみました。私はこれをもちろんRequire all deniedに戻しました。

冗長プッシュに基づいて、git-receive-packはサーバー側でbashインタープリタを起動できないようですが、なぜそれがわかりません。再度、私のユーザーアカウントで実行されているhttpd.exeから生成され、gitを手動でうまく実行できます。そして再び、gitはPATHでうまく見つかります。どのような明白な解決策がここにないのですか?

答えて

0

問題は私のhttpd.confファイルにあります。さらに、私はまず、SetEnvが必要紀元前た

SetEnv PATH "C:\\Program Files\\Git\\bin;C:\\Program Files\\Git\\usr\\bin;${PATH}" 
PassEnv USERNAME 

をしなければなりませんでした通訳は呼び出されていませんでした。私のフックの1つでは、私はのシバンラインを持っています。したがって、C:\Program Files\Git\usr\binの追加です。別のフックでは、私は#!/bin/bashを持つことができるので、C:\Program Files\Git\binが必要です。

PassEnv USERNAMEの理由は、フックの1つが環境をCGIスクリプトに渡すときにhttpdが除外する環境変数を利用していたためです。それについて話しているのはthe Apache docs here

関連する問題