Antworten:
Ein Objekt (Blobs, Bäume und Commits) mit SHA say - 810cae53e0f622d6804f063c04a83dbc3a11b7ca wird unter gespeichert
.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca
(Die Aufteilung in die ersten beiden Zeichen zur Verbesserung der Leistung des Dateisystems, da jetzt nicht alle Objekte im selben Verzeichnis gespeichert sind.)
Objekte, die wie oben gespeichert sind, werden als lose Objekte bezeichnet.
Wenn Sie mit Ihrem Repo beginnen, haben Sie meistens lose Gegenstände. Wenn die Anzahl hoch wird, wird sie ineffizient und sie werden in einer Packdatei gespeichert. Solche Objekte werden gepackte Objekte genannt.
git gc
wird ausgeführt, um Objekte zu packen (Normalerweise werden auch lose Objekte entfernt, die nicht benötigt werden und einige Wochen alt sind. Mit der --prune=<date>
Option können Sie das Entfernen loser Objekte erzwingen, die nicht mehr benötigt werden. Zum Beispiel, wenn Sie ein Commit ändern. Das alte Commit-Objekt ist no länger benötigt.)
--prune
Option ist standardmäßig aktiviert. Da sie git gc
automatisch durch die allgemeine Verwendung ausgelöst wird (z. B. commit
), müssen Sie sich darüber normalerweise keine Gedanken machen. Ich benutze keine Git-GUI und kann nicht genau finden, wo sie in der Quelle ausgelöst wird, aber entweder führt sie eine eigene Überprüfung durch oder fängt nur die gc
durch einen aufgerufenen Befehl ausgelösten ab. Es ist jedoch sicherlich kein Grund zur Sorge, nur durch den normalen Gebrauch verursacht.
git gc
manuellen Ausführung verbessert ? Ich denke, es sollte sich verbessern, weil lose Objekte ineffizient sind und 50.000 eine sehr große Zahl sind. Ich fand auch heraus, dass das Packen den vom .git
Ordner belegten Speicherplatz erheblich reduziert .
Das Git-Buch erklärt es ziemlich gut: https://git-scm.com/book/en/v2/Git-Internals-Packfiles
Lose Objekte sind das einfachere Format. Es sind einfach die komprimierten Daten, die in einer einzelnen Datei auf der Festplatte gespeichert sind. Jedes Objekt, das in eine separate Datei geschrieben wird.
git gc
für Sie ausgeführt, mit einer schönen GUI-Fortschrittsanzeige (obwohl sie die meiste Zeit als festgefahren angezeigt wird).