Der pack-objects
(Mann git-pack-objects
) starb an Signal 13 ( gebrochene Pipe ), weil git
das Objekt nicht aufgeblasen (dekomprimieren) konnte und es mit einem Fehler fehlgeschlagen ist (Fehlercode -5 könnte einen Out-of-Mem- oder Überschreib- / Überlappungsfehler bedeuten ).
Erläuterung
Gemäß dem zlib-Handbuch werden die Fehler wie folgt definiert:
#define Z_OK 0 #define Z_STREAM_END 1 #define Z_NEED_DICT 2 #define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR (-3) #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6)
wo -5
bedeutet, dass kein Fortschritt möglich ist oder wenn nicht genügend Platz im Ausgabepuffer vorhanden ist.
Z_BUF_ERROR
wenn kein Fortschritt möglich ist oder wenn zu wenig Speicherplatz im Ausgabepuffer vorhandenZ_FINISH
ist. Beachten Sie, dass diesZ_BUF_ERROR
nicht fatal ist undinflate()
erneut mit mehr Eingabe und mehr Ausgabefläche aufgerufen werden kann, um das Dekomprimieren fortzusetzen.
Was wir in der zlib-FAQ lesen können :
Stellen Sie vor dem Telefonieren sicher, dass
avail_in
undavail_out
nicht Null sind. Wenn Sie den Parameter Flush auf gleich setzenZ_FINISH
, stellen Sie außerdem sicher, dass avail_out groß genug ist, um die Verarbeitung aller anstehenden Eingaben zu ermöglichen. Beachten Sie, dass aZ_BUF_ERROR
nicht fatal ist - ein weiterer Aufruf von deflate () oder inflate () kann mit mehr Eingabe- oder Ausgabeflächen erfolgen. AZ_BUF_ERROR
kann in der Tat unvermeidlich sein, je nachdem, wie die Funktionen verwendet werden, da nicht erkennbar ist, ob beistrm.avail_out
Rückgaben mit Null mehr Ausgabe ansteht oder nicht . Ein ausführlich kommentiertes Beispiel finden Sie in zlib Usage Example .
Lösung
Dies kann mit wenigen Dingen zusammenhängen:
das Objekt, das gedrückt wird, ist zu groß, so dass für zlib Speicherplatz erforderlich ist, sodass Sie mehr Platz im Ausgabe-Zlib-Puffer benötigen.
Versuchen Sie in diesem Fall zu erhöhen
http.postBuffer
, zgit config http.postBuffer 134217728 # =~ 128MB
Alternativ können Sie auch
bfg
größere Blobs entfernen, zjava -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
Ihr Objekt ist beschädigt, also führen Sie
git fsck --full
undgit gc
Möglicherweise wurde der Speicher oder das Speichergerät beschädigt. Versuchen Sie es daher auf einem sauberen Repository oder einem anderen Computer.
Es könnte sich um einen Git-Fehler handeln, da er nicht weiter abgebrochen werden sollte
Z_BUF_ERROR
, aber um mehr Ausgabebereich oder mehr Eingabe bereitzustellen, siehe: zLib inflate () hängt während der Dekomprimierung des PuffersSie können einen Fehlerbericht an die Mailingliste melden .
könnte ein gzip inflate Problem sein (zB Ist dies ein Fehler in dieser gzip inflate-Methode? )
Es könnte sich um einen alten Kernel-Fehler handeln (<= 2.6.32-rc4). Aktualisieren Sie also Ihren Kernel
Siehe: Fehler # 547503: git-core: "git clone" schlägt am Armel fehl
Die einzig relevante Kernel-Änderung, die ich finden konnte, war commit
5a3a29f
(ARM: 5691/1: Cache-Aliasing-Probleme zwischen kmap () und kmap_atomic () mit highmem, commit7929eb9
upstream) von 2.6.31.1. Obwohl ich auch meine Zweifel habe, könnten wir Glück haben. msg00049
Andere nützliche Befehle, die Sie berücksichtigen sollten:
GIT_TRACE=1 git push origin
git count-objects -Hv
auf Überschreitung der Größenbeschränkungen prüfen
Siehe auch:
- Z_BUF_ERROR -5 beim Versuch, Zlib-Daten bei SO zu dekomprimieren
- zlib inflate gibt bei SO einen Pufferfehler zurück
Hier versagt der relevante Git-Code ( builtin/index-pack.c
):
git_inflate_init(&stream); stream.next_out = buf; stream.avail_out = buf == fixed_buf ? sizeof(fixed_buf) : size; do { unsigned char *last_out = stream.next_out; stream.next_in = fill(1); stream.avail_in = input_len; status = git_inflate(&stream, 0); use(input_len - stream.avail_in); if (sha1) git_SHA1_Update(&c, last_out, stream.next_out - last_out); if (buf == fixed_buf) { stream.next_out = buf; stream.avail_out = sizeof(fixed_buf); } } while (status == Z_OK); if (stream.total_out != size || status != Z_STREAM_END) bad_object(offset, _("inflate returned %d"), status); git_inflate_end(&stream);
und git_inflate () von zlib.c
status = inflate(&strm->z, (strm->z.avail_in != strm->avail_in) ? 0 : flush);