Update: git prune
würde das Problem "lösen", indem diese losen Objekte entfernt werden
( git gc
Aufrufe git prune
, standardmäßig jedoch nur für lose Objekte, die älter als zwei Wochen sind).
Wie das OP Michael Donohue jedoch in den Kommentaren erwähnt:
Ich mag den Sicherheitsaspekt, die losen Gegenstände zwei Wochen lang aufzubewahren, sollte ich zurückgehen und mir einige alte Revisionen ansehen wollen, also mag ich diese Lösung nicht wirklich.
Ich habe keine Probleme mit der Größe oder Leistung von Git. Es ist nur "Git Gui", das darauf besteht, mich zu bitten, die Datenbank zu komprimieren, selbst wenn das Komprimieren der Datenbank keine Auswirkungen hätte.
Ursprüngliche Antwort:
Das Problem der „ git gc
“ nicht entfernen Sie alle losen Gegenstände hat vor (Ende 2008 berichtet wurde, „ “ git gc
„scheint nicht lose zu entfernen Objekte mehr “
git gc
Entfernt nur lose Objekte, die älter als zwei Wochen sind. Wenn Sie sie jetzt wirklich entfernen möchten, führen Sie git prune aus.
Stellen Sie jedoch sicher, dass kein anderer Git-Prozess aktiv sein kann, wenn Sie ihn ausführen, oder dass er möglicherweise auf etwas tritt.
" git gc
" entpackt Objekte, die nicht mehr erreichbar sind und sich derzeit in Paketen befinden.
Als Folge Raum die Menge der Platte von einem Git Repository verwendet tatsächlich gehen kann , bis dramatisch nach einer „ git gc
“ Operation, die für jemanden überraschen könnte , die auf ihrem Dateisystem nahezu vollständig ausgeführt wird , löscht eine Reihe von Niederlassungen von einer Tracking - Repository und dann macht ein " git gc
" eine sehr unangenehme Überraschung.
[
Beispiel: ]
Alte Zweige werden über ein Tag wie reserviert next-20081204
.
Wenn Sie Ihre lokale Kopie des linux-next
Repositorys jeden Tag aktualisieren , sammeln Sie eine große Anzahl dieser alten Zweigstellen-Tags.
Wenn Sie dann eine ganze Reihe von ihnen löschen und ausführen git-gc
, dauert der Vorgang eine Weile, und die Anzahl der verwendeten Blöcke und Inodes nimmt erheblich zu.
Sie verschwinden nach einem " git prune
", aber wenn ich diesen Reinigungsvorgang durchführe, habe ich mir oft eine --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
Option für "git gc" gewünscht.
Wäre in Ihrem Fall ein " git prune
" hilfreich?
(Möglicherweise mit "jetzt" in der gc.pruneexpire
Konfigurationsvariablen, die für das obige Verhalten erforderlich ist).
Sie haben auch (aus dem gleichen Thread):
repack -a -d -l
Beachten Sie den Kleinbuchstaben 'a'.
git-gc
ruft das Umpacken mit Großbuchstaben 'A' auf, wodurch die nicht erreichbaren Objekte entpackt werden. Little 'a' ist für Leute, die wissen, was sie tun und wollen, dass Git einfach nicht erreichbare Objekte fallen lässt.