Benutzern wird empfohlen, diese Aufgabe regelmäßig in jedem Repository auszuführen, um eine gute Speicherplatznutzung und eine gute Betriebsleistung aufrechtzuerhalten.
Gibt es einige Befehle, um einige Objektzahlen zu erhalten, um herauszufinden, ob es Zeit für gc ist?
Hinweis: Einstellung gc.autodetach (Git 2.0 Q2 2014) kann beim Ausführen helfen git gc --auto ohne den Benutzer zu blockieren. siehe meine Antwort unten.
– VonC
12. März 14 um 16:42 Uhr
Adam Davis
Es hängt hauptsächlich davon ab, wie stark das Repository verwendet wird. Mit einem Benutzer, der einmal am Tag eincheckt, und einer Verzweigungs-/Merge-/usw.-Operation einmal pro Woche, müssen Sie ihn wahrscheinlich nicht öfter als einmal im Jahr ausführen.
Da mehrere Dutzend Entwickler an mehreren Dutzend Projekten arbeiten, die jeweils 2-3 Mal am Tag einchecken, möchten Sie es vielleicht jede Nacht ausführen.
Es schadet jedoch nicht, es öfter als nötig auszuführen.
Was ich tun würde, ist, es jetzt auszuführen, dann in einer Woche eine Messung der Festplattenauslastung vorzunehmen, es erneut auszuführen und die Festplattenauslastung erneut zu messen. Wenn es um 5% an Größe abfällt, dann lass es einmal pro Woche laufen. Wenn es mehr abfällt, dann lass es häufiger laufen. Wenn es weniger abfällt, dann lass es weniger häufig laufen.
Im Handbuch heißt es: “Einige Git-Befehle führen git gc –auto aus, nachdem Operationen ausgeführt wurden, die viele lose Objekte erstellen könnten.” Weiß jemand, welche Befehle es tatsächlich ausführen?
– Joshua Dance
8. Juli 14 um 15:36 Uhr
Eine große Git-Rebase ist ein offensichtliches Beispiel, da viele Commits in eine neue Historie umgeschrieben werden – wodurch viele alte Commits in Ihrem Repo verbleiben, die nicht mehr Teil des aktuellen Zweigs sind
– Mafros
5. November 14 um 6:11 Uhr
“Es wird nicht schaden, es öfter als nötig laufen zu lassen” … Ich stimme nicht ganz zu. Wie Aristoteles betont, können baumelnde Commits einen guten Backup-Mechanismus darstellen.
– Jason Baker
22. November 14 um 16:10 Uhr
Beachten Sie, dass der Nachteil des Garbage-Collection Ihres Repositorys darin besteht, dass der Garbage-Collection gesammelt wird. Wie wir alle als Computerbenutzer wissen, könnten sich Dateien, die wir derzeit als Müll betrachten, drei Tage später als sehr wertvoll erweisen. Die Tatsache, dass Git den größten Teil seiner Ablagerungen herumträgt, hat mir mehrmals den Speck gerettet – indem ich alle baumelnden Commits durchsucht habe, habe ich viel Arbeit zurückgewonnen, die ich versehentlich in Dosen gespeichert hatte.
Seien Sie also nicht zu sehr ein ordentlicher Freak in Ihren privaten Klonen. Es gibt wenig Bedarf dafür.
OTOH, der Wert der Datenwiederherstellung ist fraglich für Repos, die hauptsächlich als Remotes verwendet werden, z. der Ort, an den alle Entwickler drängen und/oder von dem sie gezogen werden. Da kann es sinnvoll sein, häufig einen GC-Lauf und ein Umpacken anzustoßen.
FWIW werden standardmäßig nicht alle losen Gegenstände müllgesammelt, sondern nur die, die älter als 2 Wochen sind (vgl. git gc --helpspeziell die --prune Möglichkeit). Es wird auch erwähnt gc.reflogExpire, was mich zu der Annahme veranlasst, dass alle Commits, die Sie in den letzten 90 Tagen besucht haben, nicht erfasst werden. (Meine Git-Version: v1.7.6)
– RobM
6. Dezember 11 um 18:28 Uhr
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 durchgeführt wurden, die viele lose Objekte erzeugen könnten.”
Ich habe es gerade zum ersten Mal auf einem mehrere Jahre alten Repository ausgeführt, und meine .git-Datei ist von 16 MB auf 2,9 MB gestiegen, was einer Größenreduzierung von 82 % entspricht. Es erscheint daher weiterhin sinnvoll, den Befehl manuell auszuführen.
– Darshan Rivka Whittle
16. April 15 um 22:00 Uhr
@DarshanRivkaWhittle hast du Git in diesen Jahren aktualisiert?
– std”OrgnlDave
3. April 19 um 19:57 Uhr
@std”OrgnlDave Ja, ich habe immer die aktuelle Version von Arch ausgeführt. Ich habe es gerade noch einmal ausgeführt, vielleicht zum ersten Mal seit meinem letzten Kommentar (dank Ihres Kommentars, der mich daran erinnert), und meine .git-Datei ist von 81 MB auf 13 MB gestiegen. Ich darf keinen der ausgeführten Befehle ausführen gc --autoIch schätze.
– Darshan Rivka Whittle
3. April 19 um 20:46 Uhr
Cregox
Wenn Sie verwenden Git-Guies sagt Ihnen, wann Sie sich Sorgen machen sollten:
This repository currently has approximately 1500 loose objects.
Der folgende Befehl bringt eine ähnliche Nummer:
$ git count-objects
Außer, aus seiner Quellegit-gui wird die Berechnungen selbst durchführen und tatsächlich etwas zählen .git/objects Ordner und bringt wahrscheinlich eine Annäherung (ich weiß es nicht tcl um das richtig zu lesen!).
Auf jeden Fall es scheint um die Warnung basierend auf einer beliebigen Zahl zu geben um herum 300 lose Gegenstände.
Legen Sie es in einem Cron-Job ab, der jede Nacht (nachmittags?) ausgeführt wird, wenn Sie schlafen.
Sollte ich es für alle Github-Repositorys tun?
– Alper
17. Januar 21 um 13:18 Uhr
zb226
Mit der neuen Einstellung (Git 2.0 Q2 2014) können Sie dies ohne Unterbrechung tun gc.autodetach.
gc --auto dauert seine Zeit und kann den Benutzer vorübergehend blockieren (aber nicht weniger ärgerlich).
Lassen Sie es auf Systemen, die es unterstützen, im Hintergrund laufen.
Das einzige, was beim Laufen im Hintergrund verloren geht, sind Ausdrucke. Aber gc output ist nicht wirklich interessant.
Sie können es im Vordergrund behalten, indem Sie es ändern gc.autodetach.
gc: Protokoll von daemonized speichern gc --auto und beim nächsten Mal ausdrucken
Während 9f673f9 begehen (gc: Konfigurationsoption zum Ausführen --auto im Hintergrund – 2014-02-08) hilft, einige Beschwerden über “gc --auto‘ Das Terminal in Beschlag zu nehmen, schafft eine weitere Reihe von Problemen.
Das Neueste in diesem Set ist, als Ergebnis der Dämonisierung, stderr geschlossen und alle Warnungen gehen verloren. Diese Warnung am Ende cmd_gc() ist besonders wichtig, weil es dem Benutzer sagt, wie er vermeiden kann “gc --auto„laufen immer wieder.
Da stderr geschlossen ist, weiß der Benutzer es nicht, natürlich beschweren sie sich über ‘gc --auto‘ CPU-Verschwendung.
Dämonisiert gc spart jetzt stderr zu $GIT_DIR/gc.log.
Folgend gc --auto läuft nicht und gc.log ausgedruckt, bis der Benutzer entfernt gc.log.
Sollte ich es für alle Github-Repositorys tun?
– Alper
17. Januar 21 um 13:18 Uhr
Amandasaurus
Ich verwende git gc, nachdem ich eine große Kasse gemacht habe und viele neue Objekte habe. es kann Platz sparen. Wenn Sie zB ein großes SVN-Projekt mit git-svn auschecken und ein git gc ausführen, sparen Sie normalerweise viel Platz
Ist das noch wahr? Sogar im Jahr ’08 war Festplattenplatz billig, das als Rechtfertigung für den Betrieb zu verwenden, scheint sinnlos
– Thymin
20. Juli 18 um 21:43 Uhr
.
8050300cookie-checkWie oft sollten Sie git-gc verwenden?yes
Aufgaben wie diese sind Hauptkandidaten für Cron (wenn Sie Linux verwenden) minhajuddin.com/2011/12/09/…
– Khaja Minhajuddin
9. Dezember 11 um 7:11 Uhr
Hinweis: Einstellung
gc.autodetach
(Git 2.0 Q2 2014) kann beim Ausführen helfengit gc --auto
ohne den Benutzer zu blockieren. siehe meine Antwort unten.– VonC
12. März 14 um 16:42 Uhr