Update: git prune
würde „lösen“ das Problem, dass es diese losen Gegenstände
(git gc
Anrufe git prune
, aber nur für lose Gegenstände älter als zwei Wochen, in der Standardeinstellung) zu entfernen.
Da jedoch die OP Michael Donohue erwähnt in den Kommentaren:
Ich mag die Sicherheitsaspekte der losen Gegenstände um zwei Wochen zu halten, sollte ich zurück zu gehen und einen Blick auf einige alte Versionen, so dass ich don Ich mag diese Lösung nicht wirklich.
Ich habe keine Probleme mit der Größe oder Leistung von Git, es ist nur 'git gui', besteht darauf, mich zu bitten, die Datenbank zu komprimieren, auch wenn die Komprimierung der Datenbank keinen Effekt haben würde.
Ursprüngliche Antwort:
Das Problem der "git gc
" nicht alle lose Gegenstände zu entfernen hat vor (Ende 2008 berichtet wurde, ""git gc
" doesn't seem to remove loose objects any more"
git gc
nur entfernt lose Objekte älter als zwei Wochen, wenn Sie sie jetzt wirklich entfernen möchten, führen Sie git Pflaume.
Aber machen Sicher, kein anderer Git Prozess kann aktiv sein, wenn Sie es ausführen, oder es könnte möglicherweise Schritt auf etwas.
"git gc
" wird entpacken Objekte, die unerreichbar geworden sind und waren derzeit in Packs.
Als Ergebnis kann die Menge an Speicherplatz von einem Git-Repository tatsächlich gehen bis dramatisch nach einer "git gc
" -Operation, die für jemanden, der fast auf ihrem Dateisystem läuft, überraschend sein kann, löscht eine Reihe von Zweige aus einem Tracking-Repository, und dann kann eine "git gc
" eine sehr unangenehme Überraschung bekommen.
[
Beispiel: ]
Alte Zweige werden über ein Tag wie next-20081204
reserviert.
Wenn Sie Ihre lokale Kopie des linux-next
-Repositorys jeden Tag aktualisieren, sammeln Sie eine große Anzahl dieser alten Zweig-Tags an.
Wenn Sie dann eine ganze Reihe von ihnen löschen und git-gc
ausführen, wird die Operation eine ganze Weile dauern, und die Anzahl der verwendeten Blöcke und Inodes wird deutlich zunehmen.
Sie nach einem „git prune
“ verschwinden werden, aber wenn ich diesen Housekeeping Betrieb tun, ich habe für 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 „git gc“ oft gewünscht.
Also in Ihrem Fall wäre ein "git prune
" hilfreich?
(möglicherweise mit der Verwendung von "jetzt" in der gc.pruneexpire
Konfigurationsvariable, die für das obige Verhalten erforderlich ist).
Sie haben auch (aus dem gleichen Thread):
repack -a -d -l
Beachten Sie die kleinen 'a'.
git-gc
ruft das Umpacken mit Großbuchstaben 'A' auf, was dazu führt, dass die nicht erreichbaren Objekte ausgepackt werden. Little 'a', ist für Leute, die wissen, was sie tun, und möchten, dass git einfach unerreichbare Objekte fallen lässt.
Dieser Dialog ist ein großartiges Beispiel für ein "Feature", von dem sich viele Leute wünschen, es existiere nicht . Es ist nicht nur lästig, es kann wichtige Commits löschen, die nach einem Hard-Reset gelöst wurden. – adelriosantiago