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/git
Ordners in geändert root.www-data
und 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.
quelle
Antworten:
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.
quelle
Um dies zu beheben, müssen wir WebDav auf dem Apache-Server in zwei Schritten aktivieren
Führen Sie diesen Befehl an der Eingabeaufforderung aus
Starten Sie dann den Apache-Server neu.
quelle