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.bare
true
sein.