2011-08-28 9 views
15

私はgit-http-backendでgitサーバーをセットアップしようとしましたが、すべてがうまくいきますが、少ししかありません。git-http-backend

設定

<VirtualHost *:80> 
ServerName git.server.com 
SetEnv GIT_PROJECT_ROOT /srv/git 
SetEnv GIT_HTTP_EXPORT_ALL 
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER 
ScriptAlias /git /usr/lib/git-core/git-http-backend/ 

<Directory "/usr/lib/git-core*"> 
    Options ExecCGI Indexes 
    Order allow,deny 
    Allow from all 
</Directory> 

<LocationMatch "^/git/repos/git-receive-pack$"> 
    AuthType Digest 
    AuthName "Git Repositories" 
    AuthUserFile /srv/git/.git-auth-file 
    AuthGroupFile /srv/git/.git-group-file 
    Require valid-user 
</LocationMatch> 
</VirtualHost> 

これは誰もがリポジトリを読み取ることができますが、唯一の有効なユーザが書くこと。バグがあるのは、URLがhttp://git.server.com/git/reposだということです。私はgitをURLのhttp://git.server.com/reposのように取り除きたいと思います。設定を変更すると、

<VirtualHost *:80> 
ServerName git.server.com 
SetEnv GIT_PROJECT_ROOT /srv/git 
SetEnv GIT_HTTP_EXPORT_ALL 
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER 
ScriptAlias//usr/lib/git-core/git-http-backend/ 

<Directory "/usr/lib/git-core*"> 
    Options ExecCGI Indexes 
    Order allow,deny 
    Allow from all 
</Directory> 

<LocationMatch "^/repos/git-receive-pack$"> 
    AuthType Digest 
    AuthName "Git Repositories" 
    AuthUserFile /srv/git/.git-auth-file 
    AuthGroupFile /srv/git/.git-group-file 
    Require valid-user 
</LocationMatch> 
</VirtualHost> 

認証が失敗します。私はまだリポジトリを読むことができますが、git pushは失敗します。なぜこのようなことが起こるのか理解できませんでした。

* About to connect() to git.server.com port 80 (#0) 
* Trying MYIP... * Connected to git.server.com (MYIP) port 80 (#0) 
> GET /iocaste/info/refs?service=git-receive-pack HTTP/1.1 
User-Agent: git/1.7.6 
Host: git.server.com 
Accept: */* 
Pragma: no-cache 

< HTTP/1.1 200 OK 
< Date: Sun, 28 Aug 2011 18:17:27 GMT 
< Server: Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/1.0.0d DAV/2 PHP/5.3.8 with Suhosin-Patch SVN/1.6.17 
< Expires: Fri, 01 Jan 1980 00:00:00 GMT 
< Pragma: no-cache 
< Cache-Control: no-cache, max-age=0, must-revalidate 
< Transfer-Encoding: chunked 
< Content-Type: application/x-git-receive-pack-advertisement 
< 
* Connection #0 to host git.server.com left intact 
Counting objects: 4, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (3/3), 257 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
* About to connect() to git.server.com port 80 (#0) 
* Trying MYIP... * connected 
* Connected to git.server.com (MYIP) port 80 (#0) 
> POST /iocaste/git-receive-pack HTTP/1.1 
User-Agent: git/1.7.6 
Host: git.server.com 
Accept-Encoding: deflate, gzip 
Content-Type: application/x-git-receive-pack-request 
Accept: application/x-git-receive-pack-result 
Content-Length: 393 

* The requested URL returned error: 404 
* Closing connection #0 
error: RPC failed; result=22, HTTP code = 404 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 

誰かが後者が失敗する理由を理解できますか? ScriptAliasが認証中に起動しなければならないと仮定します。

EDIT 1 Apacheのログには多くの情報がありませんでした。何らかの理由で認証が失敗するだけです。

のaccess_logは言う:

MYIP - - [29/Aug/2011:19:03:18 +0200] "GET /repos/info/refs?service=git-receive-pack HTTP/1.1" 200 153 
MYIP - - [29/Aug/2011:19:03:18 +0200] "POST /repos/git-receive-pack HTTP/1.1" 404 - 
とerror_logには言う:

[Mon Aug 29 19:03:18 2011] [error] [client MYIP] Request not supported: '/srv/git/error/HTTP_UNAUTHORIZED.html.var' 
+0

あなたのエラーログを確認してください。 – manojlds

+0

あなたは404を取得しています...私は以下の私のポストが助けになるかもしれないと思います..私はそれがあなたのlocationmatchが少し間違っていると推測しています.. /repos/.*/git-upload-pack$のようなものが必要かもしれないと思うでしょう – Jon

+0

: '' SetEnv' - 文中に '='は許されません!私にとっては – ShiDoiSi

答えて

4

私は100%確実な答えを持っていますが、ここではGITについての私の質問をチェックアウト、Setting up Git Server on Windows With git-http-backend.exeません。

私のLocationMatchはあまりないことにより、若干異なっている:私が使用する

<LocationMatch "^/repositories/.*/git-upload-pack$"> 
    Options +ExecCGI 
    AuthType Basic 
    AuthName intranet 
    AuthUserFile "C:/GIT/Apache/config/users" 
    AuthGroupFile "C:/GIT/Apache/config/groups" 
    Require group committers 
</LocationMatch> 

URLは、このことができます

希望をmyserver.com/repositories/mytest.gitされるだろう。

+0

、オプションExecCGIは欠けていたビット –

4

は唯一のgit-HTTP-バックエンドにgitの要求を指示し、よりインテリジェントな試合に

ScriptAlias//usr/lib/git-core/git-http-backend/ 

を変更してみてください:

ScriptAliasMatch \ 
    "(?x)^/(.*/(HEAD | \ 
        info/refs | \ 
        objects/(info/[^/]+ | \ 
          [0-9a-f]{2}/[0-9a-f]{38} | \ 
          pack/pack-[0-9a-f]{40}\.(pack|idx)) | \ 
          git-(upload|receive)-pack))$" \ 
    /usr/lib/git-core/git-http-backend/