Ich habe ein Git-Repository in einem Verzeichnis, das von Apache auf einem Server bereitgestellt wird. Ich habe WebDAV konfiguriert und es scheint korrekt zu laufen. Lackmus liefert 100% Erfolg.
Ich kann mein Repository von einem Remote-Host aus klonen. Beim Versuch, über http oder https zu pushen, wird der folgende Fehler angezeigt:
Fehler: Kein Zugriff auf URL https://git.example.com/repo/ , Rückkehrcode 22 fatal: git-http-Push fehlgeschlagen
Irgendeine Idee?
Es wird dringend empfohlen, WebDAV möglichst nicht zu verwenden. Wenn Sie HTTP/HTTPS verwenden müssen, wird die Verwendung des Skripts git-http-backend CGI über WebDAV empfohlen.
Bearbeiten Sie den folgenden Abschnitt Ihrer .git/config-Datei:
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = http://git.repository.url/repo.git
zu
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = http://username:[email protected]/repo.git
Dann versuche git Push Origin master
.
Bearbeiten Sie die Authentifizierungsdetails in Ihren Konfigurationsdateien nach Bedarf für andere Repository-URLs, und drücken Sie zum gewünschten Zweig.
Wie sagt Ihr /Web/git/Logs/ErrorLog
in diesem post-Kommentar über diesen Fehler?
Nach einem Blick in
/Web/git/Logs/ErrorLog
habe ich herausgefunden, dass in der Sperrdatei ein Berechtigungsproblem vorliegt. In meinemhttpd-dav.conf
habe ich die Zeile…
DavLockDB “/usr/var/DavLock”
Dann überprüfte ich das
/usr/
-Verzeichnis, dasvar
-Verzeichnis fehlte.
$ mkdir var
$ cd var
$ chown www .
$ chgrp www .
Und dann scheint das Wiederholen des Prozesses, dass ich jetzt schieben kann !! =)
Wie von Eddie in den Kommentaren und von Arrowmaster in seiner (aktualisierten) answer erwähnt, ist das smart http-Protokoll nun Teil der aktuellen Git-Distribution.
Das CGI-Skript git-http-backend
kann alle git-Befehle über http erledigen.
Die intelligenten Protokolle (git und ssh) führen stattdessen eine Konversation mit dem git upload-pack-Prozess auf dem Server, der die genaue Gruppe von Objekten ermittelt, die der Client benötigt, und eine benutzerdefinierte Paketdatei mit nur diesen Objekten erstellt und darüber strömt.
Git 2.17 (Q2 2018) wird eine Debugging-Hilfe hinzufügen.
Siehe commit a2b9820 (24. Januar 2018) von Patryk Obara (dreamer
) .
(Zusammengeführt von Junio C Hamano - gitster
- in commit 39a1dd8 vom 13. Februar 2018)
http-Push
: Fehlerprotokoll verbessernWenn
git Push
aufgrund eines serverseitigen WebDAV-Fehlers fehlschlägt, ist es nicht einfach, weisen auf den Hauptschuldigen hin.
Weitere Informationen zum genauencURL
-Fehler und zur HTTP-Serverantwort sind hilfreich für das Debuggen.
Ich habe das gleiche Problem und habe die Lösungen gefunden, vielleicht ist es für jemanden nützlich.
Hier ist meine Lösung mit git-http-backend-Konfiguration und ldap-Authentifizierung.
sie müssen möglicherweise den Benutzer als Mitglied für das Repository hinzufügen und möglicherweise Berechtigungen aktualisieren.
wir mussten dies mit jedem Mitglied tun, das im github-Repository unserer Organisationen beiträgt.
Ich hatte das gleiche Problem unter Windows, wo meine Anmeldeinformationen im Windows-Anmeldeinformations-Manager gespeichert sind. Ich wollte nicht, dass jeder Benutzer die Konfigurationsdatei bearbeiten muss. Deshalb änderte ich die URL von http://example.com in http: //[email protected] und es funktioniert auch, wenn meine id ist nicht git. Ich glaube nicht, dass ein Benutzer "git" irgendwo definiert ist und davon ausgeht, dass jeder Name funktionieren wird. (Wenn Sie sich nicht in einem privaten Netzwerk befinden, stellen Sie sicher, dass Sie https verwenden).
Ich hatte ein ähnliches Problem, bei dem ich mithilfe des HTTP-Protokolls das Repository klonen und aus dem Repository ziehen konnte, aber ich konnte nicht pushen. Ich habe das gelöst, indem ich Folgendes getan habe.
Ich habe die URL für das Remote in der .git/config -Datei des Projekts geändert, damit sie mit der GitHub-SSH-URL übereinstimmt. Ich habe dann alle Anweisungen unter " https://help.github.com/articles/generating-ssh-keys#platform-linux " befolgt und mit " https://help.github.com" behoben/articles/error-permission-denied-publickey ". Das Beste ist, dass ich mich nicht mit Apache befasst habe oder HTTP-Einstellungen auf dem Remote-Server geändert habe.
Ein Beispiel für das Schreiben von authentifizierten git dav virtualhost mit gitweb enable, das Ihr Problem lösen könnte:
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName git.example.com
DocumentRoot /var/git
# SSL configuration
SSLEngine on
# Fix dav header
#RequestHeader edit Destination ^https: http: early
<Directory /var/git>
DAV on
Options ExecCgi FollowSymLinks
# Gitweb config
AddHandler cgi-script .cgi
DirectoryIndex .gitweb.cgi
SetEnv GITWEB_CONFIG /var/git/.gitweb.conf
# Basic auth config
AuthType Basic
# Auth title
AuthName "Git repositories"
# Use file and external providers
AuthBasicProvider file
# File location
AuthUserFile /var/git/.htpasswd
Require method GET OPTIONS PROPFIND
<LimitExcept GET OPTIONS PROPFIND>
Require valid-user
</LimitExcept>
</Directory>
</VirtualHost>
Dann klonen Sie einfach Ihr Repository mit Ihrem Benutzer:
git clone https://[email protected]/repository
Wenn Sie versuchen, Push auszuführen, werden Sie nach Ihrem Kennwort gefragt und zur Verfügung gestellt.
Das Einfügen des Kennworts in die Klon-URL ist ein sicheres Sicherheitsrisiko, da es von jedem in Ihrer .git/config-Datei gelesen werden kann.