Git push sobre http (usando git-http-backend) y Apache no funciona

11

He estado tratando desesperadamente de que push for git funcione a través del modo "smart-http" usando git-http-backend. Sin embargo, después de muchas horas de pruebas y solución de problemas, todavía me queda

error: Cannot access URL http://localhost/git/hello.git/, return code 22
fatal: git-http-push failed`

Estoy usando las últimas versiones de Ubuntu (12.04), Apache2 (2.2.22) y Git (1.7.9.5) y he seguido diferentes tutoriales encontrados en Internet, como este http://www.parallelsymmetry.com/howto/git .jsp .

Mi archivo VHost actualmente se ve así:

<VirtualHost *:80>

    SetEnv GIT_PROJECT_ROOT /var/www/git
    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

    DocumentRoot /var/www/git

    ScriptAliasMatch \
            "(?x)^/(.*?)\.git/(HEAD | \
                                            info/refs | \
                                            objects/info/[^/]+ | \
                                            git-(upload|receive)-pack)$" \
            /usr/lib/git-core/git-http-backend/$1/$2

    <Directory /var/www/git>
            Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

</VirtualHost>

He cambiado la propiedad de la /var/www/gitcarpeta a root.www-datay para mis repositorios de prueba he habilitado la inserción anónima haciendo git config http.receivepack true. También lo he intentado con usuarios autenticados pero con el mismo resultado.

Los repositorios fueron creados usando: sudo git init --bare --shared [repo-name]

Al mirar apache2 access.log, me parece que WebDAV está tratando de ser utilizado, y que git-http-backend nunca se activa:

127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/info/refs?service=git-receive-pack HTTP/1.1" 200 207 "-" "git/1.7.9.5"
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/HEAD HTTP/1.1" 200 232 "-" "git/1.7.9.5"
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "PROPFIND /git/hello.git/ HTTP/1.1" 405 563 "-" "git/1.7.9.5"

¿Qué estoy haciendo mal? ¿Es un problema con la versión de git y / o apache que estoy usando quizás?

Por cierto: he leído todas las preguntas relacionadas con git http en ServerFault y StackOverflow, y ninguna de ellas me proporcionó una solución, así que no marque esto como duplicado.

Nils Magne Lunde
fuente
Estoy enfrentando exactamente el mismo problema, ¿tienes alguna solución?
Rishi Kulshreshtha
@RishiKulshreshtha: Lo siento, no encontré ninguna solución. Pasé a GitHub en su lugar ... Dicho esto, no he probado la solución de Deepika. Si alguien puede verificar que funciona, aceptaré esa respuesta.
Nils Magne Lunde
Ok, probé la solución de Deepika, pero no tuve éxito.
Nils Magne Lunde
Incluso probé la solución de Deepika en este momento, eso tampoco funcionó para mí.
Rishi Kulshreshtha

Respuestas:

1

Creo que el hecho de que WebDAV se esté utilizando significa que su material CGI no está configurado correctamente.

Intente utilizar la directiva ScriptAlias ​​de la forma en que la muestran en el tutorial que dijo que estaba siguiendo.

ScriptAlias /git /usr/lib/git-core/git-http-backend
Cristian Măgherușan-Stanciu
fuente
Hola. Empecé usando la directiva ScriptAlias, pero no funcionó.
Nils Magne Lunde
El mismo problema aqui. ¿Has encontrado una solución?
theV0ID
@ theV0ID No, nunca encontré una solución. Usando GitHub ahora en lugar de un servidor Git local.
Nils Magne Lunde
0

Para solucionar esto, necesitamos habilitar WebDav en el servidor apache usando 2 pasos

  1. habilitar en el archivo vhost de apache

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

DocumentRoot /var/www/git

<Directory /var/www/git>
        Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews

        AllowOverride None
        Order allow,deny
        allow from all
        Dav On
</Directory>

  1. Ejecute este comando en el símbolo del sistema

    a2enmod dav_fs

  2. Luego reinicie el servidor apache.

Deepika Srimanthula
fuente