Fehler: RPC fehlgeschlagen; Curl-Übertragung geschlossen mit verbleibenden ausstehenden Lesedaten


128

Ich versuche ein Repository von GitLab (GitLab 6.6.2 4ef8369) zu klonen und Fehler:

Geben Sie hier die Bildbeschreibung ein

remote: Counting objects: 66352, done.
remote: Compressing objects: 100% (10417/10417), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Wie vermeide ich diesen Fehler?

Antworten:


222

Es kommt meistens vor, dass ich eine langsame Internetverbindung habe und ein anständig großes Git-Repository klonen muss. Das häufigste Problem ist, dass die Verbindung geschlossen wird und der gesamte Klon abgebrochen wird.

Cloning into 'large-repository'...
remote: Counting objects: 20248, done.
remote: Compressing objects: 100% (10204/10204), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining 
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Nach vielen Versuchen und Irrtümern und einer Menge „unerwartet aufgelegtem Remote-Ende“ habe ich einen Weg, der für mich funktioniert. Die Idee ist, zuerst einen flachen Klon zu erstellen und dann das Repository mit seinem Verlauf zu aktualisieren.

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow

10
Dies ist die einzige Antwort, die eine Problemumgehung für das Problem beschreibt, ohne zu SSH zu wechseln. Das hat bei mir funktioniert, danke!
Garie

14
Der Schlüssel hier ist --depth 1und --unshallow. Dies funktioniert auch zum Abrufen eines vorhandenen Repos bei langsamer Verbindung: git fetch --depth 1dann git fetch --unshallow.
Andrew T.

1
Aus Gründen der Klarheit @AndrewT. Behandelt der git fetch --unshallowBefehl den Verbindungsverlust verzeihender als das git clone? Und das macht hier den Unterschied?
Lowell

2
Jetzt gibt der git fetch --unshallowBefehl RPC failed;Fehler
ms_27

1
Hat bei mir nicht funktioniert. Fehlgeschlagen am git fetch --unshallow. Ich denke, mein Repo ist selbst für diesen Ansatz zu groß. Nur SSH hat funktioniert.
Jonathan Cabrera

59

Nach ein paar Tagen habe ich heute gerade dieses Problem gelöst. Generieren Sie den SSH-Schlüssel und folgen Sie diesem Artikel:

https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

Erkläre es zu

  1. Git-Anbieter (GitLab, was ich benutze, GitHub).
  2. Fügen Sie dies der lokalen Identität hinzu.

Dann klonen Sie per Befehl:

git clone username@mydomain.com:my_group/my_repository.git

Und es passiert kein Fehler.

Das obige Problem

Fehler: RPC fehlgeschlagen; Curl 18-Übertragung geschlossen, wobei noch ausstehende Lesedaten vorhanden sind

weil Fehler beim Klonen per HTTP-Protokoll ( curlBefehl).

Und Sie sollten die Puffergröße erhöhen:

git config --global http.postBuffer 524288000

7
Der Wechsel von HTTP zu SSH funktioniert für mich. Konfiguration http.postBufferhat nicht funktioniert.
Thangdc94

Wenn der Fehler weiterhin besteht, sollten Sie Ihre SSH-Konfigurationsdatei vi /users/username/.ssh/config bearbeiten, serverAliveInterval 120 hinzufügen und das vi mit wq beenden (zum Speichern und Beenden). Dadurch wird verhindert, dass der Server eine Zeitüberschreitung und Verbindungsfehler aufweist.
Tanvir Singh

das ist schön, aber weiß jemand, warum das bei 100% geklonten passiert?
Workplaylifecycle

Das Ändern http.postBufferhat bei mir funktioniert - danke!
Negar Zamiri

Danke, es funktioniert für mich, diese Lösung sollte mehr gewählt werden :)
Sadmi

17

Beim Versuch, von der Fernbedienung aus zu klonen, trat wiederholt dasselbe Problem auf:

remote: Counting objects: 182, done.
remote: Compressing objects: 100% (149/149), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Endlich hat das bei mir geklappt:

git clone https://username@bitbucket.org/repositoryName.git --depth 1

3
Was - Tiefe 1 tut
Wahdat Kashmiri

Hat gut für mich funktioniert.
Vijay Junupalli

Wenn das Quell-Repository vollständig ist, konvertieren Sie ein flaches Repository in ein vollständiges Repository, und entfernen Sie alle Einschränkungen, die durch flache Repositorys auferlegt werden. Wenn das Quell-Repository flach ist, rufen Sie so viel wie möglich ab, damit das aktuelle Repository denselben Verlauf wie das Quell-Repository hat.
RahmanRezaee vor

6

Diese Schritte haben bei mir funktioniert: Verwenden git://statthttps://


3
Willkommen bei Stack Overflow. Bitte versuchen Sie, eine etwas detailliertere Antwort zu geben, damit jeder, der Ihre Lösung ausprobieren möchte, dies problemlos tun kann.
McMutton


5

Einfache Lösung: Klonen Sie nicht über https, sondern über ssh.

Beispielsweise:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone git@github.com:vaibhavjain2/xxx.git - Correct

Ja. Ich bin Windows-Benutzer.
Vaibhav Jain

5

Probleme mit der Netzwerkverbindung.
Möglicherweise aufgrund des anhaltenden Verbindungszeitlimits.
Der beste Weg ist, zu einem anderen Netzwerk zu wechseln.


5

Sie müssen die Komprimierung deaktivieren:

git config --global core.compression 0

Dann müssen Sie einen flachen Klon verwenden

git clone --depth=1 <url>

Der wichtigste Schritt ist dann, eine CD in Ihr geklontes Projekt zu erstellen

cd <shallow cloned project dir>

Öffnen Sie nun den Klon Schritt für Schritt

git fetch --depth=N, with increasing N

z.B.

git fetch --depth=4

dann,

git fetch --depth=100

dann,

git fetch --depth=500

Sie können auswählen, wie viele Schritte Sie möchten, indem Sie dieses N ersetzen.

und schließlich alle verbleibenden Revisionen herunterladen mit,

git fetch --unshallow 

upvote wenn es dir hilft :)


4

Wie oben erwähnt, führen Sie zunächst Ihren git-Befehl von bash aus und fügen Sie am Anfang die erweiterten Protokollanweisungen hinzu: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

zB GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin Dies zeigt Ihnen detaillierte Fehlerinformationen.


2

Bei mir trat dieses Problem aufgrund der Proxy-Konfiguration auf. Ich habe den IP-Git-Server in der Proxy-Ausnahme hinzugefügt. Der Git-Server war lokal, aber die Umgebungsvariable no_proxy wurde nicht richtig festgelegt.

Ich habe diesen Befehl verwendet, um das Problem zu identifizieren:

#Linux:
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1

#Windows
set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1

Im Gegenzug gab es die "Proxy-Autorisierung", da der Git-Server vor Ort nicht durch den Proxy gehen sollte. Das eigentliche Problem war jedoch die Größe der Dateien, die durch die Proxy-Regeln definiert wurden


2

Für mich war das Problem, dass die Verbindung geschlossen wird, bevor der gesamte Klon abgeschlossen ist. Ich habe Ethernet anstelle einer WLAN-Verbindung verwendet. Dann löst es sich für mich



1

Dieser Fehler scheint häufiger bei einer langsamen oder problematischen Internetverbindung aufzutreten. Ich habe mich mit guter Internetgeschwindigkeit verbunden, dann funktioniert es perfekt.


0

Dieses Problem tritt auf, wenn Sie ein Proxy-Problem oder ein langsames Netzwerk haben. Sie können mit der Tiefenlösung gehen oder

git fetch --all  or git clone 

    

Wenn dies zu einem Fehler beim Einrollen führt, laden Sie die Datei per Zip herunter oder geben Sie den Namen des Zweigs anstelle von --all an

git fetch origin BranchName 

-1

Ändern des Git-Klon-Protokolls, um es zu versuchen.

Dieser Fehler trat beispielsweise auf, wenn "git clone https: // xxxxxxxxxxxxxxxx "

Sie können es mit "git clone git: // xxxxxxxxxxxxxx" versuchen, vielleicht dann ok.


-6

Diese Schritte funktionieren für mich:

cd [dir]
git init
git clone [your Repository Url]

Ich hoffe das funktioniert auch bei dir.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.