Der Unterschied besteht darin, dass bei der Verwendung von --mirror
, alle Refs werden kopiert wie besehen . Das bedeutet alles: Remote-Tracking-Zweige, Notizen, refs/originals/* (Backups von filter-branch). Das geklonte Repository hat alles. Es ist auch so eingerichtet, dass eine Fernaktualisierung alles vom Ursprung zurückholt (und die kopierten Refs überschreibt). Die Idee ist wirklich, das Repository zu spiegeln, um eine vollständige Kopie zu haben, so dass Sie zum Beispiel Ihr zentrales Repository an mehreren Orten hosten können, oder es sichern können. Stellen Sie sich vor, Sie würden das Projektarchiv einfach kopieren, nur eben auf eine viel elegantere Art und Weise.
Die neue Dokumentation sagt so ziemlich alles aus:
--mirror
Richten Sie einen Spiegel des Quell-Repositorys ein. Dies impliziert --bare
. Verglichen mit --bare
, --mirror
ordnet nicht nur die lokalen Zweige der Quelle den lokalen Zweigen des Ziels zu, sondern ordnet auch alle Verweise (einschließlich entfernter Zweige, Notizen usw.) zu und richtet eine refspec-Konfiguration ein, so dass alle diese Verweise durch eine git remote update
im Ziel-Repository.
In meiner ursprünglichen Antwort wurde auch auf die Unterschiede zwischen einem Bare Clone und einem normalen (nicht-bare) Clone hingewiesen - der nicht-bare Clone richtet entfernte Verfolgungszweige ein und erstellt nur einen lokalen Zweig für HEAD
, während der bloße Klon die Zweige direkt kopiert.
Nehmen wir an, der Ursprung hat ein paar Zweige ( master (HEAD)
, next
, pu
und maint
), einige Tags ( v1
, v2
, v3
), einige entfernte Zweige ( devA/master
, devB/master
), und einige andere Referenzen ( refs/foo/bar
, refs/foo/baz
(das können Notizen, Verstecke, Namensräume anderer Entwickler sein, wer weiß).
-
git clone origin-url
(nicht entblößt): Sie erhalten alle Tags kopiert, einen lokalen Zweig master (HEAD)
Verfolgung eines entfernten Zweigs origin/master
und abgelegene Zweigstellen origin/next
, origin/pu
und origin/maint
. Die Verfolgungszweige sind so eingerichtet, dass Sie, wenn Sie etwas tun wie git fetch origin
werden sie so abgeholt, wie Sie es erwarten. Alle entfernten Zweige (in der geklonten Fernbedienung) und andere Referenzen werden vollständig ignoriert.
-
git clone --bare origin-url
: Sie erhalten alle Tags kopiert, lokale Zweige master (HEAD)
, next
, pu
und maint
keine Zweigstellen für die Fernüberwachung. Das heißt, alle Zweige werden so kopiert, wie sie sind, und es wird völlig unabhängig eingerichtet, ohne die Erwartung, dass sie wieder geholt werden. Alle entfernten Zweige (in der geklonten entfernten Datei) und andere Verweise werden vollständig ignoriert.
-
git clone --mirror origin-url
: Jede einzelne dieser Referenzen wird so kopiert, wie sie ist. Sie erhalten alle Tags, lokale Zweige master (HEAD)
, next
, pu
und maint
abgelegene Zweigstellen devA/master
y devB/master
, andere Verweise refs/foo/bar
y refs/foo/baz
. Alles ist genau so, wie es in der geklonten Fernbedienung war. Die Fernverfolgung ist so eingerichtet, dass Sie bei der Ausführung von git remote update
werden alle Refs vom Ursprung überschrieben, als ob Sie den Mirror einfach gelöscht und neu geklont hätten. Wie in den Dokumenten ursprünglich gesagt wurde, ist es ein Spiegel. Es soll eine funktional identische Kopie sein, die mit dem Original austauschbar ist.