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.