Git push over http (en utilisant git-http-backend) et Apache ne fonctionne pas

11

J'ai désespérément essayé d'obtenir push pour git en passant par le mode "smart-http" en utilisant git-http-backend. Cependant, après de nombreuses heures de test et de dépannage, il me reste encore

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

J'utilise les dernières versions d'Ubuntu (12.04), Apache2 (2.2.22) et Git (1.7.9.5) et j'ai suivi différents didacticiels trouvés sur Internet, comme celui-ci http://www.parallelsymmetry.com/howto/git .jsp .

Mon fichier VHost ressemble actuellement à ceci:

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

J'ai changé la propriété du /var/www/gitdossier pour root.www-dataet pour mes référentiels de test, j'ai activé la poussée anonyme en faisant git config http.receivepack true. J'ai également essayé avec des utilisateurs authentifiés mais avec le même résultat.

Les référentiels ont été créés en utilisant: sudo git init --bare --shared [repo-name]

En regardant le fichier access.log d'apache2, il me semble que WebDAV essaie d'être utilisé et que git-http-backend n'est jamais déclenché:

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'est-ce que je fais mal? Est-ce un problème avec la version de git et / ou apache que j'utilise peut-être?

BTW: J'ai lu toutes les questions liées à git http sur ServerFault et StackOverflow, et aucune ne m'a fourni de solution, alors ne marquez pas cela comme double.

Nils Magne Lunde
la source
Je suis confronté exactement au même problème, avez-vous trouvé une solution?
Rishi Kulshreshtha
@RishiKulshreshtha: Désolé, je n'ai trouvé aucune solution. Passé à GitHub à la place ... Cela dit, je n'ai pas essayé la solution de Deepika. Si quelqu'un peut vérifier que cela fonctionne, j'accepterai cette réponse.
Nils Magne Lunde
Ok, j'ai essayé la solution de Deepika, mais sans succès.
Nils Magne Lunde
Même si j'ai essayé la solution de Deepika tout à l'heure, cela n'a pas fonctionné pour moi aussi.
Rishi Kulshreshtha

Réponses:

1

Je pense que le fait que WebDAV soit utilisé signifie que votre contenu CGI n'est pas configuré correctement.

Essayez d'utiliser la directive ScriptAlias ​​comme elle l'affiche dans le didacticiel que vous avez dit que vous suiviez.

ScriptAlias /git /usr/lib/git-core/git-http-backend
Cristian Măgherușan-Stanciu
la source
Salut. J'ai commencé à utiliser la directive ScriptAlias, mais cela n'a pas fonctionné.
Nils Magne Lunde
Même problème ici. Avez-vous trouvé une solution?
theV0ID
@ theV0ID Non, je n'ai jamais trouvé de solution. Utiliser GitHub maintenant au lieu d'un serveur Git local.
Nils Magne Lunde
0

Pour résoudre ce problème, nous devons activer WebDav sur le serveur Apache en 2 étapes

  1. activer au fichier vhost d'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. Exécutez cette commande à l'invite de commande

    a2enmod dav_fs

  2. Redémarrez ensuite le serveur apache.

Deepika Srimanthula
la source