Wie oft sollten Sie git-gc verwenden?
Die Handbuchseite sagt einfach:
Benutzer werden aufgefordert, diese Aufgabe regelmäßig in jedem Repository auszuführen, um eine gute Speicherplatzauslastung und eine gute Betriebsleistung zu gewährleisten.
Gibt es einige Befehle, um einige Objektzählungen zu erhalten, um herauszufinden, ob es Zeit für gc ist?
gc.autodetach
(Git 2.0 Q2 2014) kann beim Ausführen helfen,git gc --auto
ohne den Benutzer zu stören. siehe meine Antwort unten .Antworten:
Dies hängt hauptsächlich davon ab, wie oft das Repository verwendet wird. Wenn ein Benutzer einmal am Tag eincheckt und einmal pro Woche eine Verzweigung / Zusammenführung / usw. ausgeführt wird, müssen Sie diese wahrscheinlich nicht mehr als einmal im Jahr ausführen.
Wenn mehrere Dutzend Entwickler an mehreren Dutzend Projekten arbeiten, die jeweils 2-3 Mal am Tag einchecken, möchten Sie es möglicherweise jede Nacht ausführen.
Es wird jedoch nicht schaden, es häufiger als nötig auszuführen.
Ich würde es jetzt ausführen und dann in einer Woche die Festplattenauslastung messen, erneut ausführen und die Festplattenauslastung erneut messen. Wenn die Größe um 5% abnimmt, führen Sie sie einmal pro Woche aus. Wenn es mehr abfällt, führen Sie es häufiger aus. Wenn es weniger abfällt, führen Sie es weniger häufig aus.
quelle
Beachten Sie, dass der Nachteil beim Sammeln von Müll in Ihrem Repository darin besteht, dass der Müll gesammelt wird. Wie wir alle als Computerbenutzer wissen, könnten sich Dateien, die wir derzeit als Müll betrachten, in drei Tagen als sehr wertvoll herausstellen. Die Tatsache, dass Git den größten Teil seiner Trümmer in der Nähe hält, hat meinen Speck mehrmals gerettet - durch Durchsuchen aller baumelnden Commits habe ich viel Arbeit zurückgewonnen, die ich versehentlich eingemacht hatte.
Sei also nicht zu ein ordentlicher Freak in deinen privaten Klonen. Es besteht wenig Bedarf dafür.
OTOH, der Wert der Datenwiederherstellbarkeit ist für Repos fraglich, die hauptsächlich als Fernbedienungen verwendet werden, z. der Ort, zu dem alle Entwickler schieben und / oder ziehen. Dort kann es sinnvoll sein, häufig einen GC-Lauf und ein Umpacken zu starten.
quelle
git gc --help
. Speziell die--prune
Option). Es wird auch erwähntgc.reflogExpire
, was mich zu der Annahme führt, dass ein Commitish, das Sie in den letzten 90 Tagen besucht haben, nicht gesammelt wird. (Meine Git-Version: v1.7.6)Neuere Versionen von git führen gc bei Bedarf automatisch aus, sodass Sie nichts tun müssen. Siehe den Abschnitt Optionen von man git-gc (1) : "Einige git-Befehle führen git gc --auto aus, nachdem Operationen ausgeführt wurden, die viele lose Objekte erstellen könnten."
quelle
gc --auto
, die ausgeführt werden.Wenn Sie Git-Gui verwenden , erfahren Sie, wann Sie sich Sorgen machen sollten:
Der folgende Befehl bringt eine ähnliche Nummer:
Abgesehen davon , dass Git-GUI von seiner Quelle aus die Mathematik selbst erledigt, tatsächlich etwas im
.git/objects
Ordner zählt und wahrscheinlich eine Annäherung bringt (ich weiß nicht,tcl
ob ich das richtig lesen soll!).In jedem Fall scheint es die Warnung zu geben, die auf einer beliebigen Zahl von etwa 300 losen Objekten basiert .
quelle
Git-Gui
undcount-objects
sind nicht gerade gute Antworten auf die Frage hier ... Aber sie sollten es sein!Lassen Sie es in einem Cron-Job fallen, der jede Nacht (nachmittags?) Läuft, wenn Sie schlafen.
quelle
Ich benutze git gc, nachdem ich eine große Kasse gemacht habe, und habe viele neue Objekte. es kann platz sparen. Wenn Sie beispielsweise ein großes SVN-Projekt mit git-svn auschecken und ein git gc ausführen, sparen Sie normalerweise viel Platz
quelle
Mit der neuen Einstellung (Git 2.0 Q2 2014) können Sie dies ohne Unterbrechung tun
gc.autodetach
.Siehe Commit 4c4ac4d und Commit 9f673f9 ( Nguyễn Thái Ngọc Duy, auch bekannt als pclouds ):
Seit dieser Version 2.0 gab es jedoch einen Fehler: Git 2.7 (Q4 2015) stellt sicher, dass die Fehlermeldung nicht verloren geht .
Siehe Commit 329e6e8 (19. September 2015) von Nguyễn Thái Ngọc Duy (
pclouds
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 076c827 , 15. Oktober 2015)quelle
Dieses Zitat stammt aus; Versionskontrolle mit Git
quelle
git commit --amend
). Dies kann mit überprüft werdengit log --reflog
. Ich habe einen Zweig in das Remote-Repository verschoben und meinen Baum erneut überprüft. Die unerreichbaren Verpflichtungen waren immer noch da. Anscheinendgit gc
wurde nicht ausgeführt, als dieser Stoß passierte. …?Ich verwende es, wenn ich ein großes Commit mache, vor allem, wenn ich mehr Dateien aus dem Repository entferne. Danach sind die Commits schneller
quelle
Sie müssen nicht
git gc
sehr oft verwenden, dagit gc
(Garbage Collection) automatisch für mehrere häufig verwendete Befehle ausgeführt wird:Quelle: git gc Best Practices und FAQs
quelle