2016-06-07 2 views

Antwort

3

Es gibt in der Tat zwei Arten von Spiegeln, wie in the git remote documentation notiert:

Wenn ein Abrufspiegel mit --mirror=fetch erstellt wird, wird die refs nicht in dem refs/Fernbedienungen gespeichert werden/ Namensraum, aber alles in refs/ auf der Fernbedienung wird direkt in refs/ in der lokalen Repository gespiegelt werden. Diese Option ist nur in leeren Repositories sinnvoll, da ein Fetch alle lokalen Commits überschreiben würde.

Wenn ein Push-Spiegel mit --mirror=push erstellt wird, dann git push wird immer so verhalten, als ob --mirror übergeben wurde.

A holen Spiegel (das bekommen, was Sie, wenn Sie git clone --mirror verwenden) ist mit seinen beiden wichtigsten Einstellungen nachweisbar, core.bare und seine fetch Linie:

$ git remote add --mirror=fetch rfetch ssh://upstream.host/path/to/repo.git 
$ git config --get-all remote.rfetch.fetch 
+refs/*:refs/* 
$ 

einen Push-Spiegel Erkennung ist einfacher:

$ git remote add --mirror=push rpush ssh://upstream.host/path/to/repo.git 
$ git config --get --bool remote.rpush.mirror 
true 

Wenn eine bestimmte remote.remote.fetch wird auf +refs/*:refs/* aber das Repository nicht haben core.bare auf true (die Sie mit git config --get --bool core.bare oder git rev-parse --is-bare-repository ermitteln können; beide machen das Gleiche), Sie haben ein verwirrendes Repository (wie das, das ich gemacht habe, um das oben zu illustrieren :-)). Wenn es mehr als einen Abschnitt remote.remote gibt, und alle von ihnen haben fetch=+refs/*:refs/*, haben Sie ein seltsam-am besten Repository (in der Theorie könnte ein Abruf Spiegel mit mehreren Fernbedienungen als eine Art Union-Repository funktionieren, aber alle Fernbedienungen müssten verwendet werden verschiedene Referenzen, zB könnte nur eine master Verzweigung haben). Sie können alle Fernbedienungen mit git config --get-regexp oder git config --list finden und Objekte extrahieren, die dem regulären Ausdruck ^remote\. entsprechen. Hier awk ist tatsächlich vielleicht die am besten geeignete Prozessor, wenn Schreiben von Skripts:

$ git config --list | awk -F. '$1 == "remote" { if (!r[$2]++) print $2 }' 
rfetch 
rpush 
$ 

eine Liste der Fernbedienungen erhalten haben, Sie dann jeder für seine Spiegel-ness als entweder abholen oder Push-Spiegel sondieren kann. Wenn es sich um einen Abrufspiegel handelt, sollte core.baretrue sein.

-1

Git verwendet eine Peer-to-Peer-Architektur. Ein Git-Repository, das ein Spiegel ist, erscheint und verhält sich genauso wie seine Quelle. Um sie voneinander zu unterscheiden, können Sie in der Datei ".git/config" nachsehen, da Konfigurationsdateien nicht übertragen werden, aber nicht explizit angeben, dass es sich um eine Spiegelung handelt.

1

Versuch:

git config --list | grep remote 

remote.origin.url=<git remote url> 
remote.origin.fetch=+refs/*:refs/* 
remote.origin.mirror=true 

Ich verstehe nicht, die Feinheiten oben aufgeführt, aber das funktionierte für mich.

Verwandte Themen