Autenticação para o git push over http

3

Eu configurei o apache para usar o git-http-backend de acordo com as instruções no livro de estatísticas e em sua página de manual. Minha configuração do apache agora se parece com:

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
Require group committers
</LocationMatch>

Eu posso clonar um repositório usando git clone http: //user@url/git/repo.git
que me pede a senha para 'usuário' e continua. No entanto, quando tento empurrar, sou solicitada a senha duas vezes e, em seguida, obtenho um erro:

Cannot access URL http: //user@url/git/repo.git/, return code 22

(Eu inseri um espaço nos URLs, porque o mecanismo de prevenção de spam não me permite postar de outra forma)

Quando vejo meu log do apache, vejo: 192.168.1.151 - - [12/Sep/2010:20:11:22 +0100] "GET /git/repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:23 +0100] "GET /git/repo.git/info/refs HTTP/1.1" 200 59 "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:23 +0100] "GET /git/repo.git/HEAD HTTP/1.1" 200 23 "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:26 +0100] "PROPFIND /git/repo.git/ HTTP/1.1" 404 - "-" "git/1.7.2.3"

Eu adicionei 'user' ao grupo 'committers' no servidor (pareceu mais fácil apenas seguir as instruções), e o meu local .netrc (chmodded 600) tem esta aparência:

machine address
login user
password pass

Todas as instruções que eu encontrei parecem pouco claras sobre se eu tenho que habilitar DAV para o diretório em questão (eu pensei que era a maneira antiga de fazer isso, no entanto). Eu poderia apenas usar o gitolite, mas eu gostaria de chegar ao fundo deste primeiro…

    
por urschrei 12.09.2010 / 21:21

2 respostas

2

PROPFIND é um método HTTP webdav não padrão.
Você precisará ativar o webdav para o local do seu repositório. Ative o mod_dav no httpd.conf e adicione isto ao seu bloco vhost LocationMatch:

<LocationMatch "^/git/.*/git-receive-pack$">
  #...
  Dav on
</LocationMatch>

Depois, certifique-se de que seu usuário do Apache tenha acesso de gravação ao seu repositório.

    
por 10.10.2010 / 23:02
2

O importante no seu log do apache é a seguinte linha:

  192.168.1.151 - - [12/Sep/2010:20:11:22 +0100] "GET /git/repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.7.2.3"

git-http-backend está retornando um código 403 / Forbidden quando o cliente pede para usar o método git-receive-pack. Em seguida, ele retorna ao WebDAV, mas usando o WebDAV não é necessário .

Eu tive o mesmo problema; no meu caso, isso ocorreu porque o REMOTE_USER não estava sendo configurado. No meu caso, REDIRECT_REMOTE_USER / was / set, então eu configurei REMOTE_USER para REDIRECT_REMOTE_USER, o que resolveu o problema.

Eu documentei minha configuração no meu blog - e veja se isso funciona para você.

    
por 14.10.2010 / 17:11