Разница в том, что при использовании --mirror
, все ссылки копируются как есть . Это означает все: удаленное отслеживание веток, заметок, ссылок / оригиналов / * (резервные копии из фильтра-ветки). В клонированном репо есть все. Он также настроен так, что удаленное обновление будет повторно извлекать все из источника (перезаписывая скопированные ссылки). Идея состоит в том, чтобы действительно отразить хранилище, иметь полную копию, чтобы вы могли, например, разместить свое центральное хранилище в нескольких местах или сделать его резервную копию. Подумайте только о прямом копировании репо, за исключением гораздо более элегантного мерзавца.
Новая документация в значительной степени говорит все это:
--mirror
Настройте зеркало исходного хранилища. Это подразумевает --bare
. По сравнению с --bare
, --mirror
не только отображает локальные ветви источника в локальные ветви цели, но и отображает все ссылки (включая удаленные ветви, заметки и т. Д.) И устанавливает конфигурацию refspec таким образом, что все эти ссылки перезаписываются на git remote update
в целевом хранилище.
В моем исходном ответе также были отмечены различия между чистым клоном и обычным (не голым) клоном - клон не голый устанавливает удаленные ветви отслеживания, создавая только локальную ветвь для HEAD
, тогда как голый клон копирует ветви напрямую.
Предположим, у источника есть несколько ветвей (master (HEAD)
, next
, pu
и maint
), некоторые теги (v1
, v2
, v3
), некоторые удаленные ветви (* 1033) *, devB/master
) и некоторые другие ссылки (refs/foo/bar
, refs/foo/baz
, которые могут быть заметками, тайниками, пространствами имен других разработчиков, кто знает).
git clone origin-url
(не непокрытый): Вы получите все скопированные теги, локальную ветку master (HEAD)
, отслеживающую удаленную ветку origin/master
и удаленные ветки origin/next
origin/pu
и origin/maint
. Ветви трекинга настроены так, что если вы сделаете что-то вроде git fetch origin
, они будут выбраны так, как вы ожидаете. Любые удаленные ветви (в клонированном удаленном) и другие ссылки полностью игнорируются.
git clone --bare origin-url
: Вы получите все скопированные теги, локальные ветви master (HEAD)
, next
, pu
и maint
, без удаленных отслеживающих ветвей. То есть все ветви копируются как есть, и они настроены полностью независимо, без ожидания повторной загрузки. Любые удаленные ветви (в клонированном удаленном) и другие ссылки полностью игнорируются.
git clone --mirror origin-url
: Каждый последний из этих ссылок будет скопирован как есть. Вы получите все теги, локальные ветви master (HEAD)
, next
, pu
и maint
, удаленные ветви devA/master
и devB/master
, другие ссылки refs/foo/bar
и refs/foo/baz
. Все именно так, как было в клонированном пульте. Удаленное отслеживание настроено так, что если вы запустите git remote update
, то все ссылки будут перезаписаны с начала координат, как если бы вы просто удалили зеркало и отозвали его заново. Как первоначально сказали документы, это зеркало. Предполагается, что это функционально идентичная копия, взаимозаменяемая с оригиналом.