2011-08-28 13 views
15

Intenté configurar un servidor de git con git-http-backend y todo funciona como yo quiero, pero hay una pequeña cosa.git-http-backend

La configuración

<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> 

Esto permite que todo el mundo leer los repositorios, pero sólo los usuarios válidos para escribir. Lo que me molesta es que la url es http://git.server.com/git/repos. Me gustaría deshacerme de git en la URL como http://git.server.com/repos. Cuando cambio la configuración a

<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> 

La autenticación falla. Todavía puedo leer los repos pero git push falla. No pude entender por qué sucede esto.

* 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 

¿Alguien me puede ayudar a entender por qué esta última falla? Supongo que debe ser que ScriptAlias ​​se active durante la autenticación.

EDITAR 1 El registro de apache no me dio mucha información. Solo que la autenticación falla por alguna razón.

El access_log dice:

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 - 

y el error_log dice:

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

un chequeo de registros de errores. – manojlds

+0

obtienes un 404 ... Creo que mi publicación a continuación podría ser de ayuda ... Supongo que es tu coincidencia de ubicación es un poco incorrecta ... creo que podrías necesitar algo como /repos/.*/git-upload-pack$ – Jon

+0

Nota : no '=' está permitido en la declaración 'SetEnv'! – ShiDoiSi

Respuesta

4

no tengo una respuesta segura de fuego 100%, pero echa un vistazo a mi pregunta sobre GIT aquí, Setting up Git Server on Windows With git-http-backend.exe.

Mi LocationMatch es ligeramente diferente, pero no por mucho:

<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> 

La url yo usaría sería myserver.com/repositories/mytest.git~~V~~singular~~3rd

Espero que esto ayude.

+0

para mí, Opciones ExecCGI era el bit faltante –

4

intente cambiar

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

a un partido más inteligente que sólo dirige las solicitudes de Git 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/