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でうまく見つかります。どのような明白な解決策がここにないのですか?