710 Stimmen

Was ist der Unterschied zwischen git clone --mirror und git clone --bare

Auf der Hilfeseite von git clone steht folgendes zu lesen --mirror :

Richten Sie einen Spiegel des entfernten Repositorys ein. Dies impliziert --bare .

geht aber nicht im Detail darauf ein, wie die --mirror Klon ist anders als ein --bare Klon.

19voto

PaulMurrayCbr Punkte 1129

Ein Klon kopiert die Refs von der Gegenstelle und packt sie in ein Unterverzeichnis mit dem Namen "das sind die Refs, die die Gegenstelle hat".

Ein Mirror kopiert die Refs des entfernten Rechners und fügt sie in seine eigene oberste Ebene ein - er ersetzt seine eigenen Refs durch die des entfernten Rechners.

Das bedeutet, dass jemand, der von Ihrem Mirror abruft und die Refs des Mirrors in sein Unterverzeichnis packt, die gleichen Refs erhält wie im Original. Das Ergebnis eines Abrufs von einem aktuellen Spiegel ist dasselbe wie ein direkter Abruf aus dem ursprünglichen Repository.

18voto

Ahmad Ismail Punkte 8416

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.

9voto

Shantanu Singh Punkte 167
$ git clone --bare https://github.com/example

Mit diesem Befehl wird die neue " example " Verzeichnis selbst das $GIT_DIR (anstelle von example/.git ). Auch die Verzweigungsköpfe auf der entfernten Seite werden direkt in die entsprechenden lokalen Verzweigungsköpfe kopiert, ohne dass eine Zuordnung erfolgt. Wenn diese Option verwendet wird, werden weder entfernte Verzweigungen noch die zugehörigen Konfigurationsvariablen erstellt.

$ git clone --mirror https://github.com/example

Wie bei einem bloßen Klon enthält ein gespiegelter Klon alle entfernten Zweige und Tags, aber alle lokalen Referenzen (einschließlich der entfernten Zweige, Notizen usw.) werden bei jedem Holen überschrieben, so dass es immer derselbe Stand wie das ursprüngliche Repository ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X