Spiegelt ein git clone / push / pull den genauen Inhalt der beteiligten Repos?

9

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.

%Vor%     
Andy 28.07.2011, 20:14
quelle

1 Antwort

5

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 - Ссылка

    
manojlds 28.07.2011, 20:24
quelle

Tags und Links