Git Push über http (mit Git-http-Backend) und Apache funktioniert nicht

11

Ich habe verzweifelt versucht, Push für Git durch den "Smart-http" -Modus mit Git-http-Backend zu bekommen. Nach vielen Stunden des Testens und der Fehlerbehebung bin ich jedoch immer noch mit

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

Ich verwende die neuesten Versionen von Ubuntu (12.04), Apache2 (2.2.22) und Git (1.7.9.5) und habe verschiedene im Internet gefundene Tutorials befolgt, wie dieses http://www.parallelsymmetry.com/howto/git .jsp .

Meine VHost-Datei sieht derzeit folgendermaßen aus:

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

Ich habe den Besitz des /var/www/gitOrdners in geändert root.www-dataund für meine Test-Repositorys habe ich anonymes Push-by aktiviert git config http.receivepack true. Ich habe es auch mit authentifizierten Benutzern versucht, aber mit dem gleichen Ergebnis.

Die Repositorys wurden erstellt mit: sudo git init --bare --shared [repo-name]

Beim Betrachten des apache2 access.log scheint mir, dass WebDAV versucht, verwendet zu werden, und dass das Git-http-Backend niemals ausgelöst wird:

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"

Was mache ich falsch? Ist es ein Problem mit der Version von Git und / oder Apache, die ich vielleicht benutze?

Übrigens: Ich habe alle git http-bezogenen Fragen zu ServerFault und StackOverflow gelesen und keine davon hat mir eine Lösung geliefert. Bitte markieren Sie diese nicht als Duplikat.

Nils Magne Lunde
quelle
Ich stehe vor genau dem gleichen Problem. Haben Sie eine Lösung gefunden?
Rishi Kulshreshtha
@ RishiKulshreshtha: Sorry, habe keine Lösung gefunden. Ich bin stattdessen zu GitHub übergegangen ... Das heißt, ich habe die Lösung von Deepika nicht ausprobiert. Wenn jemand überprüfen kann, ob es funktioniert, werde ich diese Antwort akzeptieren.
Nils Magne Lunde
Ok, habe Deepikas Lösung ausprobiert, aber keinen Erfolg.
Nils Magne Lunde
Sogar ich habe gerade Deepikas Lösung ausprobiert, das hat auch bei mir nicht funktioniert.
Rishi Kulshreshtha

Antworten:

1

Ich denke, die Tatsache, dass WebDAV verwendet wird, bedeutet, dass Ihr CGI-Material nicht richtig konfiguriert ist.

Versuchen Sie, die ScriptAlias-Direktive so zu verwenden, wie sie in dem Tutorial angezeigt wird, dem Sie gefolgt sind.

ScriptAlias /git /usr/lib/git-core/git-http-backend
Cristian Măgherușan-Stanciu
quelle
Hallo. Ich habe angefangen, die ScriptAlias-Direktive zu verwenden, aber es hat nicht funktioniert.
Nils Magne Lunde
Selbes Problem hier. Haben Sie eine Lösung gefunden?
theV0ID
@ theV0ID Nein, ich habe nie eine Lösung gefunden. Verwenden Sie GitHub jetzt anstelle eines lokalen Git-Servers.
Nils Magne Lunde
0

Um dies zu beheben, müssen wir WebDav auf dem Apache-Server in zwei Schritten aktivieren

  1. Aktivieren Sie die vhost-Datei von 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. Führen Sie diesen Befehl an der Eingabeaufforderung aus

    a2enmod dav_fs

  2. Starten Sie dann den Apache-Server neu.

Deepika Srimanthula
quelle