Ich war nicht sicher, wie ich die Frage formulieren sollte, also entschuldige mich, wenn es nicht klar ist. Wenn du git clone
ein Repo hast, das ein paar dangling Objekte hatte, klonst du das? Gleiches gilt für das Gegenteil. Wenn Sie eine git gc
gemacht und diese an jemand anderen weitergegeben haben, verliert ihr Repo irgendetwas, was die git gc
aufgeräumt hätte?
Ich würde vermuten, dass keiner von beiden auftreten wird, aber ich kann keine Dokumentation zu diesem Szenario finden.
Ich habe einige Informationen gefunden, die darauf hindeuten, dass bei den meisten Protokollen git clone
Ihnen ein sauberes Repo gibt, Aber wenn Sie die Datei mit einem Dateipfad angeben, kopiert sie alles.
Git Clone klont nicht baumelnde Objekte.
Und Ihr git gc
beeinflusst das Remote-Repo in keiner Weise, wenn Sie darauf drücken, es sei denn, Ihr Push verursacht hängende Objekte und dann wird git gc
auf Remote ausgeführt, um diese zu entfernen.
Es sei denn ....
Es war ein gemeinsamer Klon (angegeben mit dem --shared
oder -s
Flag) oder ein lokaler Klon ( --local
oder -l
). Aus der Dokumentation:
-l
Wenn das zu klonende Repository auf einem lokalen Computer liegt, wird dieses Flag angezeigt Umgeht den normalen "git aware" Transportmechanismus und klont die Repository durch Erstellen einer Kopie von HEAD und alles unter den Objekten und refs Verzeichnisse . Die Dateien unter .git / objects / Verzeichnis sind Hardlinked, um Platz zu sparen, wenn möglich. Dies ist jetzt der Standard wann Das Quell-Repository wird mit der Syntax / path / to / repo angegeben im Wesentlichen ist eine No-Op-Option. Kopieren statt Hardlinking erzwingen (was wünschenswert sein kann, wenn Sie versuchen, eine Sicherungskopie Ihrer Repository), aber vermeiden Sie immer noch den üblichen "git aware" -Transport Mechanismus, --no-hardlinks können verwendet werden.
-s
Wenn sich das zu klonende Repository auf dem lokalen Computer befindet, statt mit harten Links, automatisch Setup. Git / Objekte / Info / wechselt zu teile die Objekte mit dem Quell-Repository. Das resultierende Repository beginnt ohne eigenes Objekt.
HINWEIS: Dies ist eine möglicherweise gefährliche Operation; verwende es nicht, es sei denn Du verstehst was es macht. Wenn Sie Ihr Repository mit diesem klonen Option und dann löschen Sie Zweige (oder verwenden Sie einen anderen Git-Befehl, der macht jedes vorhandene Commit unreferenziert) im Quell-Repository Objekte können unreferenziert werden (oder baumeln). Diese Objekte können sein entfernt durch normale Git-Operationen (wie Git Commit), die ruft automatisch git gc --auto auf.
Wenn Sie also git clone /path/to/repo
ausführen, kopieren Sie die Objekte (oder erstellen Hardlinks) und Sie erhalten in diesem Fall das hängende Objekt. In anderen Fällen (mit Git-Protokollen, SSH, Dateiprotokoll usw.) werden Sie niemals die baumelnden Objekte im Klon bekommen.
Schauen Sie hier nach, wie der Transport passiert - Ссылка
Tags und Links git