fatal: frühe EOF fatal: Index-Pack fehlgeschlagen

271

Ich habe gegoogelt und viele Lösungen gefunden, aber keine funktioniert für mich.

Ich versuche, von einem Computer aus zu klonen, indem ich eine Verbindung zum Remote-Server im LAN-Netzwerk herstelle.
Das Ausführen dieses Befehls von einem anderen Computer aus führt zu Fehlern.
Aber das Ausführen des Befehls SAME clone mit git: //192.168.8.5 ... auf dem Server ist in Ordnung und erfolgreich.

Irgendwelche Ideen ?

user@USER ~
$ git clone  -v git://192.168.8.5/butterfly025.git
Cloning into 'butterfly025'...
remote: Counting objects: 4846, done.
remote: Compressing objects: 100% (3256/3256), done.
fatal: read error: Invalid argument, 255.05 MiB | 1.35 MiB/s
fatal: early EOF
fatal: index-pack failed

Ich habe diese Konfiguration hinzugefügt, .gitconfigaber auch keine Hilfe.
Verwenden der Git-Version 1.8.5.2.msysgit.0

[core]
    compression = -1
Wilhelm
quelle
8
Ich war 2-3 Tage mit diesem Problem konfrontiert, als ich versuchte, von VPN zu klonen. In meinem Fall war das Problem die Netzwerkbandbreite. Ich habe durch Klonen in einem Hochgeschwindigkeitsnetzwerk behoben.
Avijit Nagare
1
Ich habe auch bemerkt, dass es netzwerkbezogen ist.
Wunder
1
Ich habe diesen Fehler erhalten, weil meine Freunde Git nicht so gut kennen und viele Bilder in das Repository schieben! =))
Clite Tailor
Ich habe auch bemerkt, dass es netzwerkbezogen ist. Ich habe auch durch Klonen in einem Hochgeschwindigkeitsnetzwerk behoben.
shashaDenovo

Antworten:

505

Schalten Sie zuerst die Komprimierung aus:

git config --global core.compression 0

Als nächstes machen wir einen Teilklon, um die Menge der Informationen zu kürzen, die runterkommen:

git clone --depth 1 <repo_URI>

Wenn das funktioniert, gehen Sie in das neue Verzeichnis und rufen Sie den Rest des Klons ab:

git fetch --unshallow 

oder alternativ

git fetch --depth=2147483647

Machen Sie jetzt einen regelmäßigen Zug:

git pull --all

Ich denke, es gibt einen Fehler mit msysgit in den 1.8.x-Versionen, der diese Symptome verschlimmert. Eine andere Option ist es, es mit einer früheren Version von git zu versuchen (<= 1.8.3, glaube ich).

ingyhere
quelle
6
Danke, das hat super funktioniert. Ich hatte versucht, den http.postbuffer zu ändern, was nicht funktionierte, aber nachdem ich wie in dieser Antwort angegeben vorgegangen war, funktionierte es großartig. Ich habe nicht die Zeile "git fetch --depth = 2147483647" verwendet, aber den Rest.
Nick Benedict
2
@ EthenA.Wilson Anschließend müssen Sie die Remote-URL für das Repository übergeben. ZB git clone --depth 1 git@host:user/my_project.git.
Nathan Gould
6
@ Jose A. - Ich hatte dieses Problem, als ich auf einer neueren Version von msysgit war. Wenn Sie mit msysgit arbeiten, versuchen Sie es mit einer älteren Version (<= 1.8.3). Versuchen Sie andernfalls, git fetch --depth 1000 (dann 2000 usw., schrittweise zu erhöhen, bis alle Dateien abgerufen wurden).
Ingyhere
2
@ Jose A. - Schauen Sie sich auch
Folgendes
2
Hallo mein Freund. Vielen Dank für Ihre großartige Lösung. Aber das letzte git pull --allfunktioniert nicht. Wegen git clone --depth 1wird der Abrufbereich nur ein Zweig eingestellt. Also müssen wir zuerst .git / config bearbeiten.
pjincz
93

Dieser Fehler kann bei Speicherbedarf von git auftreten. Sie können diese Zeilen in der globalen git Konfigurationsdatei hinzufügen , die ist .gitconfigin $USER_HOME, um das Problem zu beheben.

[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 
[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m
bhdrkn
quelle
Dies funktionierte für mich - obwohl ich noch mehrere Versuche brauchte, aber ohne diese Änderung kam der Abbruch bei 30%, danach bei 75% ... und einmal ging es auf 100% und funktionierte. :)
peschü
Muss die ausgewählte Antwort sein
Asim Qasımzade
Unter Windows mit Git 2.19 wurde dies behoben. Speziell das Hinzufügen der packbezogenen Parameter.
Καrτhικ
Hat funktioniert! Vielen Dank!
Guille Acosta
arbeitet immer noch nicht für mich remote: Enumerating objects: 43, done. remote: Counting objects: 100% (43/43), done. remote: Compressing objects: 100% (24/24), done. error: inflate returned -55/26) fatal: unpack-objects failed
Jeevan Chaitanya
26

endlich gelöst durch git config --global core.compression 9

Aus einem BitBucket-Problem-Thread:

Ich habe es fast fünf Mal versucht, und es passiert immer noch.

Dann habe ich versucht, eine bessere Komprimierung zu verwenden und es hat funktioniert!

git config --global core.compression 9

Aus der Git-Dokumentation:

core.compression
Eine Ganzzahl -1..9, die eine Standardkomprimierungsstufe angibt. -1 ist die zlib-Standardeinstellung.
0 bedeutet keine Komprimierung und 1..9 sind verschiedene Kompromisse zwischen Geschwindigkeit und Größe, wobei 9 am langsamsten ist.
Wenn diese Option aktiviert ist, werden andere Komprimierungsvariablen wie core.looseCompression und pack.compression standardmäßig bereitgestellt.

Jacky
quelle
3
Musste git repackin Kombination mit dieser Lösung laufen und dann funktionierte es.
ErikH
Das hat funktioniert, ich habe nicht einmal andere Lösungen ausprobiert, weil diese die kürzeste und eleganteste ist. sollte Antwort akzeptiert werden!
Metablaster
Dies funktioniert auch bei mir über VPN und Corporate Proxy. --compression 0hat nicht funktioniert und auch nicht alle .gitconfigoben vorgeschlagenen Änderungen.
Terrence Brannon
20

Wie @ingyhere sagte:

Flacher Klon

Schalten Sie zuerst die Komprimierung aus:

git config --global core.compression 0

Als nächstes machen wir einen Teilklon, um die Menge der Informationen zu kürzen, die runterkommen:

git clone --depth 1 <repo_URI>

Wenn das funktioniert, gehen Sie in das neue Verzeichnis und rufen Sie den Rest des Klons ab:

git fetch --unshallow

oder alternativ

git fetch --depth=2147483647

Jetzt ziehen Sie:

git pull --all

Dann, um das Problem Ihrer lokalen Niederlassung nur Tracking-Master zu lösen

Öffnen Sie Ihre Git-Konfigurationsdatei ( .git/config) im Editor Ihrer Wahl

wo steht:

[remote "origin"]
    url=<git repo url>
    fetch = +refs/heads/master:refs/remotes/origin/master

Ändern Sie die Zeile

fetch = +refs/heads/master:refs/remotes/origin/master

zu

fetch = +refs/heads/*:refs/remotes/origin/*

Führen Sie einen Git-Abruf durch, und Git zieht jetzt alle Ihre Remote-Zweige ab

cmpickle
quelle
Es funktioniert, aber ich habe die Komprimierung auf 9 und nicht auf 0 belassen, was fehlgeschlagen ist.
Metablaster
9

In meinem Fall war das sehr hilfreich:

git clone --depth 1 --branch $BRANCH $URL

Dadurch wird die Kaufabwicklung nur auf den genannten Zweig beschränkt, wodurch der Vorgang beschleunigt wird.

Hoffe das wird helfen.

sMajeed
quelle
6

Ich habe all diese Befehle ausprobiert und keiner funktioniert für mich, aber was funktioniert, war, die git_url in http statt ssh zu ändern

if is clone command do:

git clone <your_http_or_https_repo_url> 

Andernfalls, wenn Sie an einem vorhandenen Repo arbeiten, tun Sie dies mit

git remote set-url origin <your_http_or_https_repo_url>

hoffe das hilft jemandem!

elin3t
quelle
1
Bei dieser Frage geht es wirklich um die Fehlermeldung in der obigen Ausgabe, wenn beim Synchronisieren riesiger Dateiblöcke von einem verbundenen Repo ein Problem auftritt. Sie sagen, dass das Umschalten von ssh auf https den Abschluss des Klons ermöglichte?
Ingyhere
Ja! Diese Arbeit für mich, ich habe ein 4 GB + Repo und die einzige Lösung, die ich bekam, war die!
elin3t
2
Es funktioniert bei mir, danke! Klonen Sie vorbei httpsund setzen Sie die Fernbedienung wieder auf ssh.
Tuan
1
Ich würde wirklich gerne wissen, warum das funktioniert hat. Gibt es etwas im SSH-Protokoll, das große Objekte erstickt, was HTTPS nicht tut? Ist dies ein Problem mit der Transportschicht?
bdetweiler
6

Ich habe diesen Fehler erhalten, als git nicht mehr genügend Speicher hat.

Das Freigeben von Speicherplatz (in diesem Fall: Beenden eines Kompilierungsauftrags) und erneutes Versuchen haben für mich funktioniert.

André Laszlo
quelle
Für mich war nicht viel Speicher verfügbar, etwas freizugeben und es erneut zu versuchen, löste es.
Martin Cassidy
4

In meinem Fall war es ein Verbindungsproblem. Ich war mit einem internen WLAN-Netzwerk verbunden, in dem ich nur eingeschränkten Zugriff auf Ressourcen hatte. Das ließ Git den Abruf machen, aber zu einer bestimmten Zeit stürzte es ab. Dies bedeutet, dass es sich um ein Netzwerkverbindungsproblem handeln kann. Überprüfen Sie, ob alles ordnungsgemäß ausgeführt wird: Antivirus, Firewall usw.

Die Antwort von elin3t ist daher wichtig, da ssh die Leistung des Downloads verbessert, so dass Netzwerkprobleme vermieden werden können

iberbeu
quelle
4

Die Einstellung der folgenden Konfiguration funktioniert bei mir nicht.

[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 
[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m

Als vorheriger Kommentar könnte es sich um das Speicherproblem von git handeln. Daher versuche ich, Arbeitsfäden (von 32 auf 8) zu reduzieren. Damit es nicht gleichzeitig viele Daten vom Server erhält. Dann füge ich auch "-f" hinzu, um die Synchronisierung anderer Projekte zu erzwingen.

-f: Proceed with syncing other projects even if a project fails to sync.

Dann funktioniert es jetzt gut.

repo sync -f -j8
KimmyYang
quelle
2

Eine frühere Antwort empfiehlt die Einstellung auf 512 m. Ich würde sagen, es gibt Gründe zu der Annahme, dass dies bei einer 64-Bit-Architektur kontraproduktiv ist. Die Dokumentation zu core.packedGitLimit lautet:

Die Standardeinstellung ist 256 MiB auf 32-Bit-Plattformen und 32 TiB (praktisch unbegrenzt) auf 64-Bit-Plattformen. Dies sollte für alle Benutzer / Betriebssysteme angemessen sein, außer für die größten Projekte. Sie müssen diesen Wert wahrscheinlich nicht anpassen.

Wenn Sie es ausprobieren möchten, überprüfen Sie, ob Sie es eingestellt haben, und entfernen Sie dann die Einstellung:

git config --show-origin core.packedGitLimit
git config --unset --global core.packedGitLimit
8DH
quelle
1

Beachten Sie, dass Git 2.13.x / 2.14 (Q3 2017) den Standardwert erhöht, der Folgendes core.packedGitLimitbeeinflusst git fetch:
Der Standardgrenzwert für gepackte Git wurde auf größeren Plattformen ( von 8 GiB auf 32 GiB ) erhöht , um " git fetch" vor einem (behebbaren) Fehler zu schützen während " gc" parallel läuft.

Siehe Commit be4ca29 (20. April 2017) von David Turner ( csusbdt) .
Mit freundlicher Unterstützung von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit d97141b , 16. Mai 2017)

Erhöhen, ansteigen core.packedGitLimit

Wenn core.packedGitLimitüberschritten wird, schließt git die Packungen.
Wenn parallel zu einem Abruf ein Umpackvorgang ausgeführt wird, öffnet der Abruf möglicherweise ein Paket und muss es schließen, da PackedGitLimit getroffen wird.
Das Umpacken könnte dann das Paket unter dem Abruf löschen, wodurch der Abruf fehlschlägt.

Erhöhen Sie core.packedGitLimitden Standardwert, um dies zu verhindern.

Auf aktuellen 64-Bit-x86_64-Computern stehen 48 Bit Adressraum zur Verfügung.
Es scheint, dass 64-Bit-ARM-Maschinen keinen Standard-Adressraum haben (das heißt, er variiert je nach Hersteller), und IA64- und POWER-Maschinen haben die vollen 64-Bit.
48 Bit sind also die einzige Grenze, um die wir uns vernünftigerweise kümmern können. Wir reservieren ein paar Bits des 48-Bit-Adressraums für die Verwendung durch den Kernel (dies ist nicht unbedingt erforderlich, aber es ist besser, sicher zu sein) und verwenden bis zu den verbleibenden 45.
Kein Git-Repository wird zu irgendeinem Zeitpunkt annähernd so groß sein bald, so sollte dies den Ausfall verhindern.

VonC
quelle
1

In meinem Fall war das Problem keiner der Git-Konfigurationsparameter, sondern die Tatsache, dass mein Repository eine Datei hatte, die die auf meinem System maximal zulässige Dateigröße überschritt. Ich konnte es überprüfen, indem ich versuchte, eine große Datei herunterzuladen und ein "Dateigrößenlimit überschritten" für Debian zu erhalten.

Danach habe ich meine Datei /etc/security/limits.conf bearbeitet und am Ende die folgenden Zeilen hinzugefügt: * hard fsize 1000000 * soft fsize 1000000

Um die neuen Grenzwerte tatsächlich "anzuwenden", müssen Sie sich erneut anmelden

tpalanques
quelle
1

Tangential verwandt und nur nützlich, wenn Sie keinen Root-Zugriff haben und Git manuell aus einem RPM (mit rpm2cpio) oder einem anderen Paket (.deb, ..) in einen Unterordner extrahieren. Typischer Anwendungsfall: Sie versuchen, eine neuere Version von Git anstelle der veralteten Version auf einem Unternehmensserver zu verwenden.

Wenn der Git-Klon mit fatal: index-pack failed ohne frühzeitige EOF-Erwähnung, aber stattdessen mit einer Hilfemeldung fehlschlägt usage: git index-pack, liegt eine Versionsinkongruenz vor und Sie müssen Git mit dem folgenden --exec-pathParameter ausführen :

git --exec-path=path/to/subfoldered/git/usr/bin/git clone <repo>

Damit dies automatisch geschieht, geben Sie Folgendes an ~/.bashrc:

export GIT_EXEC_PATH=path/to/subfoldered/git/usr/libexec
Tyblitz
quelle
1

Ich hatte die gleichen Fehlerprotokolle mit git (v2.17.1) über ssh. In meinem Fall lautet die Lösung:

  1. Betreten Sie das Git Bare Repository meines Servers.
  2. Rufen Sie an git gc.

Siehe git-gc-Dokumentation: https://git-scm.com/docs/git-gc .

Z.B:

ssh admin@my_server_url.com
sudo su git
cd /home/git/my_repo_name # where my server's bare repository exists.
git gc

Jetzt kann ich dieses Repository fehlerfrei klonen, zB auf Client-Seite:

git clone git@my_server_url.com:my_repo_name

Der Befehl git gckann auf der Git-Client-Seite aufgerufen werden, um ähnliche git pushProbleme zu vermeiden .


Eine andere (Hack-) Lösung ist das Herunterladen des letzten Masters ohne Verlauf:

git clone --single-branch --depth=1 git@my_server_url.com:my_repo_name

Es besteht die Möglichkeit, dass kein Pufferüberlauf auftritt.

Michał Jaroń
quelle
0

In meinem Fall funktionierte nichts, als das Protokoll https war, dann wechselte ich zu ssh und stellte sicher, dass ich das Repo aus dem letzten Commit und nicht aus dem gesamten Verlauf und auch aus einem bestimmten Zweig zog. Das hat mir geholfen:

Git-Klon - Tiefe 1 "ssh: .git" - Zweig "spezifischer Zweig"

Shripada
quelle
0

Ich habe alle Downloads, die ich in der Zwischenzeit durchgeführt habe, deaktiviert, wodurch wahrscheinlich Speicherplatz frei wurde und die Bandbreite erhöht / verringert wurde

Bartłomiej Wach
quelle
0

Das Git-Daemon-Problem scheint in Version 2.17.0 behoben worden zu sein (überprüft mit einer nicht funktionierenden Version 2.16.2.1). Das heißt, eine Problemumgehung für die Auswahl von Text in der Konsole zum "Sperren des Ausgabepuffers" sollte nicht mehr erforderlich sein.

Von https://github.com/git/git/blob/v2.17.0/Documentation/RelNotes/2.17.0.txt :

  • Verschiedene Korrekturen an "git daemon". (füge ed15e58efe jk / daemon-fixes später zur Wartung zusammen).
GreenMoose
quelle
0

Ich habe das gleiche Problem. Nach dem ersten Schritt oben konnte ich klonen, aber ich kann nichts anderes tun. Alte Zweige können nicht abgerufen, gezogen oder ausgecheckt werden.

Jeder Befehl wird viel langsamer als gewöhnlich ausgeführt und stirbt nach dem Komprimieren der Objekte.

I:\dev [master +0 ~6 -0]> git fetch --unshallow
remote: Counting objects: 645483, done.
remote: Compressing objects: 100% (136865/136865), done.

error: RPC failed; result=18, HTTP code = 20082 MiB | 6.26 MiB/s

fatal: early EOF

fatal: The remote end hung up unexpectedly

fatal: index-pack failed

Dies passiert auch, wenn Ihre Schiedsrichter zu viel Speicher verwenden. Das Beschneiden der Erinnerung hat dies für mich behoben. Fügen Sie einfach eine Grenze für das hinzu, was Sie so abrufen ->

git fetch --depth=100

Dadurch werden die Dateien abgerufen, jedoch mit den letzten 100 Änderungen in ihrem Verlauf. Danach können Sie jeden Befehl gut und mit normaler Geschwindigkeit ausführen.

Vishav Premlall
quelle
Was meinst du mit TED?
Vishav Premlall
Diese "Antwort" sollte ein Kommentar zu @ingyheres Antwort sein.
mc0e
0

Bei den meisten Antworten hier habe ich den Fehler mit dem PUTTY SSH Client mit allen möglichen Konstellationen erhalten.

Nachdem ich zu OpenSSH gewechselt war, war der Fehler behoben (entfernen Sie die Umgebungsvariable GIT_SSH und starten Sie die Git-Bash neu).

Ich habe eine neue Maschine und die neuesten Git-Versionen verwendet. Auf vielen anderen / älteren Computern (auch AWS) funktionierte es wie erwartet auch mit PUTTY ohne Git-Konfiguration.

Max
quelle
0

Ich habe das gleiche Problem erlebt. Das REPO war zu groß, um über SSH heruntergeladen zu werden. Genau wie von @ elin3t empfohlen, habe ich über HTTP / HTTPS geklont und die REMOTE-URL in .git / config geändert, um das SSH-REPO zu verwenden.

Rodel
quelle
0

Ich habe das gleiche Problem wie unten, wenn ich renne git pull

remote: Counting objects: 149, done.
Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

Dann überprüfte ich git status, ob es so viele nicht festgeschriebene Änderungen gab, dass ich das Problem durch Festschreiben und Übertragen aller nicht festgeschriebenen Änderungen behoben habe .

Kiran Reddy
quelle
0

Keine der oben genannten Lösungen hat bei mir funktioniert.

Die Lösung, die schließlich für mich funktionierte, war das Wechseln des SSH-Clients. Die Umgebungsvariable GIT_SSH wurde auf OpenSSH festgelegt, das von Windows Server 2019 bereitgestellt wird. Version 7.7.2.1

C:\Windows\System32\OpenSSH\ssh.exe

Ich habe einfach Putty installiert, 0.72

choco install putty

Und geändert GIT_SSH in

C:\ProgramData\chocolatey\lib\putty.portable\tools\PLINK.EXE

careri
quelle
0

Ich habe so ziemlich alle hier gemachten Vorschläge ausprobiert, aber keiner hat funktioniert. Für uns war das Problem temperamentvoll und wurde immer schlimmer, je größer die Repos wurden (auf unserem Jenkins Windows Build Slave).

Es war die Version von ssh, die von git verwendet wurde. Git wurde für die Verwendung einer Version von Open SSH konfiguriert, die in der .gitconfig-Datei des Benutzers über die Variable core.sshCommand angegeben ist. Durch Entfernen dieser Zeile wurde das Problem behoben. Ich glaube, das liegt daran, dass Windows jetzt mit einer zuverlässigeren / kompatibleren Version von SSH ausgeliefert wird, die standardmäßig verwendet wird.

aatwo
quelle
-1

Dies funktionierte für mich, indem ich den Googles-Nameserver einrichtete, da kein Standard-Nameserver angegeben wurde, gefolgt vom Neustart des Netzwerks:

sudo echo "dns-nameservers 8.8.8.8" >> /etc/network/interfaces && sudo ifdown venet0:0 && sudo ifup venet0:0
Luca Steeb
quelle
-1

Von einem Git-Klon bekam ich:

error: inflate: data stream error (unknown compression method)
fatal: serious inflate inconsistency
fatal: index-pack failed

Nach dem Neustart meines Computers konnte ich das Repo gut klonen.

Paul Sturgess
quelle
Beim ersten Mal kann ich nicht glauben, dass Sie dieses Problem durch einen Neustart Ihres Computers beheben können, aber ich habe alles versucht, was mir angezeigt wurde und was nicht funktioniert. Deshalb habe ich beschlossen, meinen Computer neu zu starten. Dies ist meine letzte Lösung für mich. Zum Glück versuche ich beim Starten der Maschine erneut zu klonen. Ich kann es nicht glauben. Das funktioniert !!!!!!!
Thxopen
-1

Wenn Sie unter Windows arbeiten, möchten Sie möglicherweise überprüfen, ob der Git-Klon fehlschlägt , wenn "Index-Pack" fehlgeschlagen ist. .

Grundsätzlich können Sie nach dem Ausführen Ihres git.exe daemon ...Befehls Text aus diesem Konsolenfenster auswählen. Wiederholen Sie das Ziehen / Klonen, es könnte jetzt funktionieren!

Weitere Informationen finden Sie in dieser Antwort .

user276648
quelle
-2

Stellen Sie sicher, dass auf Ihrem Laufwerk noch genügend Speicherplatz vorhanden ist

IndieTech-Lösungen
quelle