Anders als git clone
, git clone --mirror
y git clone --bare
beide sind reine Repos. Der Unterschied zwischen ihnen liegt in der config
archivo.
git clone
Die Konfigurationsdatei sieht wie folgt aus:
[remote "origin"]
url = https://github.com/example
fetch = +refs/heads/*:refs/remotes/origin/*
git clone --bare
Die Konfigurationsdatei sieht wie folgt aus:
[remote "origin"]
url = https://github.com/example
git clone --mirror
Die Konfigurationsdatei sieht wie folgt aus:
[remote "origin"]
url = https://github.com/example
fetch = +refs/*:refs/*
mirror = true
Wir sehen also, dass der Hauptunterschied in der refspec für den Abruf zu verwenden
Das Format der refspec ist erstens eine optionale +
gefolgt von <src>:<dst>
, donde <src>
ist das Muster für Verweise auf die entfernten Seite und <dst>
ist der Ort, an dem diese Verweise nachverfolgt werden lokal. Die Website +
weist Git an, die Referenz zu aktualisieren, auch wenn es sich nicht um eine Schnellvorlauf ist.
Im Falle von git clone
die automatisch von einem git remote add origin
Befehl holt Git alle Referenzen unter refs/heads/
auf dem Server und schreibt sie in refs/remotes/origin/
vor Ort.
Im Falle von git clone --bare
gibt es keine Refspec, die für den Abruf verwendet werden kann.
Im Falle von git clone --mirror
sieht die für den Abruf zu verwendende refspec wie folgt aus fetch = +refs/*:refs/*
. Es bedeutet, tags
, remotes
, replace
(die unter refs
Verzeichnis) zusammen mit heads
wird ebenfalls abgeholt. Beachten Sie das, standardmäßig git clone
nur abholen heads
.
ANMERKUNG 1: git clone --mirror
y git clone --bare --mirror
gleichwertig sind.
ANMERKUNG 2: Es gibt auch Unterschiede in packed-refs
. Da es dieselben Informationen aufzeichnet wie refs/heads/
, refs/tags/
und Freunde auf effizientere Weise aufnehmen.