wake-up-neo.com

Git kann nicht mit http/https in ein Remote-Repository verschoben werden

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?

20
Clément

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.

11
Arrowmaster

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.

34
Deepak

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 meinem httpd-dav.conf habe ich die Zeile…

DavLockDB “/usr/var/DavLock”

Dann überprüfte ich das /usr/-Verzeichnis, das var-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.

smart http

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 verbessern

Wenn git Push aufgrund eines serverseitigen WebDAV-Fehlers fehlschlägt, ist es nicht einfach, weisen auf den Hauptschuldigen hin.
Weitere Informationen zum genauen cURL-Fehler und zur HTTP-Serverantwort sind hilfreich für das Debuggen.

3
VonC

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.

2
gaspar

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.

2
JrBriones

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

1
Robert Murphy

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.

1
FearlessFuture

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.

0
Raphaël Gertz