Kurzfassung: Es bedeutet, was es sagt, und wenn Sie es einfach beenden lassen, wird alles gut.
Während der meisten Vorgänge, die möglicherweise die Anzahl der losen (entpackten) Objekte im Repository erhöhen können (einschließlich Pushs), wird Git aufgerufen git gc --auto
. Wenn genügend lose Objekte vorhanden sind (standardmäßig mindestens 6700), wird das git repack -d -l
Packen aufgerufen. Wenn zu viele separate Packungen vorhanden sind, werden diese auch in eine Packung umgepackt.
Ein Pack ist eine Delta-komprimierte Einzeldatei, die eine große Anzahl von Objekten enthält. Das Speichern von Objekten in Paketen ist effizienter, das Packen (Komprimieren) von Objekten dauert jedoch einige Zeit. Daher erstellt Git zunächst lose Objekte und packt sie dann ab und zu in Stapeln über den automatischen Aufruf von git gc --auto
.
Wenn Sie Git das Umpacken beenden lassen, wird dies für eine Weile nicht mehr vorkommen. Es kann in der Tat eine Weile dauern, insbesondere wenn Sie viele große binäre Objekte haben, aber wenn es ausgelöst wird, ist dies ein Zeichen dafür, dass es wahrscheinlich den vom Repo belegten Speicherplatz drastisch reduzieren wird. Wenn Sie dies wirklich nicht möchten, können Sie den Konfigurationsparameter ändern gc.auto
. Wenn Sie den Wert auf etwas viel Größeres als 6700 erhöhen, tritt er seltener auf, dauert jedoch länger. Wenn Sie es verringern, muss es immer noch Ihr aktuelles Umpacken durchführen, aber anschließend passiert es häufiger und endet schneller. Wenn Sie den Wert auf 0 setzen, wird das automatische Umpacken deaktiviert.
Siehe man git-gc
(unter --auto
) und man git-config
(unter gc.auto
) für weitere Informationen.
fatal: Out of memory, malloc failed (tried to allocate 79610689 bytes) error: failed to run repack
- das bekomme ich, wenn ich unsere gesamte Codebasis in ein Git-Repo stecke. Ich denke , ich werde töten apps und Kraft umpacken „manuell“Während Jefroni richtig ist, dass das automatische Packen manchmal nur Zeit benötigt, um fertig zu sein, besteht eine gute Chance, dass bei der Bereinigung von git baumelnde Objekte fehlen, wie in dieser Frage beschrieben .
Versuchen Sie auszuführen, um festzustellen, ob baumelnde Objekte fortlaufende Meldungen zum automatischen Packen auslösen
git fsck
. Wenn Sie eine lange Liste von baumelnden Commits erhalten, können Sie diese mit bereinigengit gc --prune=now
Normalerweise muss ich dies alle 2-3 Monate auf meinem Repo ausführen, wenn die Nachricht zum automatischen Packen nach einem einzigen Zug nicht verschwindet.
quelle
git pull
über mehrere Tage hinweg eine Nachricht machte , undfsck
zeigte tatsächlich eine Menge baumelnder Commits.So deaktivieren Sie für ein Projekt:
So deaktivieren Sie global:
quelle
Git führt git-repack aus, das viele Objekte (= Dateien, Commits und Bäume) in eine Packdatei packt. Git tut dies manchmal, wenn eine Heuristik besagt, dass Speicherplatz gespeichert werden kann (eine Packdatei enthält komprimierte Objektdeltas, während jede Datei im Objektverzeichnis den komprimierten vollständigen Dateiinhalt enthält).
quelle
Hoffentlich ist dieser
git gc --auto
Schritt jetzt (Git 2.0.1, 25. Juni 2014) effizienter.Siehe Commit 62aad18 von Nguyễn Thái Ngọc Duy (
pclouds
)gc --auto
: Refs nicht im Hintergrund sperrenUnd Git 2.22 (Q2 2019) weiter optimieren
git gc
.quelle