6 ответов:
разница в том, что при использовании
--mirror,все ссылки скопировать как есть. Это означает все: ветви удаленного отслеживания, заметки, ссылки / оригиналы / * (резервные копии из filter-branch). Клонированные РЕПО имеет все это. Он также настроен так, что удаленное обновление будет повторно извлекать все из источника (перезапись скопированных ссылок). Идея состоит в том, чтобы действительно отразить репозиторий, чтобы иметь полную копию, чтобы вы могли, например, разместить свое центральное РЕПО в нескольких места, или резервное копирование. Подумайте только о прямом копировании РЕПО, за исключением гораздо более элегантного способа git.новая документация в значительной степени говорит все это:
--mirrorнастройка зеркала исходного репозитория. Это подразумевает
--bare. По сравнению с--bare,--mirrorне только отображает локальные ветви источника в локальные ветви цели, он отображает все ссылки (включая удаленные ветви, заметки и т. д.) и устанавливает конфигурация refspec такова, что все эти ссылки перезаписываютсяgit remote updateв целевом хранилище.мой оригинальный ответ также отметил различия между голым клоном и нормальным (не голым) клоном - не голый клон настраивает удаленные ветви отслеживания, создавая только локальную ветвь для
HEAD, в то время как голый клон копирует ветви напрямую.предположим, что origin имеет несколько ветвей (
master (HEAD),next,puиmaint), некоторые теги (v1,v2,v3), некоторые удаленные филиалы (devA/master,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все ссылки будут перезаписаны из origin, как если бы вы только что удалили зеркало и повторно его клонировали. Как документы первоначально сказал, это зеркало. Это должна быть функционально идентичная копия, взаимозаменяемая с оригиналом.
$ git clone --mirror $URL- это сокращение для
$ git clone --bare $URL $ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)(скопировано непосредственно из здесь)
как говорит текущая man-страница:
по сравнению с
--bare,--mirrorне только отображает локальные ветви источника в локальные ветви цели, он отображает все ссылки (включая удаленные ветви, заметки и т. д.) и настраивает конфигурацию refspec таким образом, что все эти ссылки перезаписываютсяgit remote updateв целевом хранилище.
мои тесты с git-2.0.0 сегодня показывают, что параметр --mirror не копирует крючки, файл конфигурации, файл описания, файл info/exclude и, по крайней мере, в моем тестовом случае несколько ссылок (которые я не понимаю.) Я бы не назвал его "функционально идентичной копией, взаимозаменяемой с оригиналом"."
-bash-3.2$ git --version git version 2.0.0 -bash-3.2$ git clone --mirror /git/hooks Cloning into bare repository 'hooks.git'... done. -bash-3.2$ diff --brief -r /git/hooks.git hooks.git Files /git/hooks.git/config and hooks.git/config differ Files /git/hooks.git/description and hooks.git/description differ ... Only in hooks.git/hooks: applypatch-msg.sample ... Only in /git/hooks.git/hooks: post-receive ... Files /git/hooks.git/info/exclude and hooks.git/info/exclude differ ... Files /git/hooks.git/packed-refs and hooks.git/packed-refs differ Only in /git/hooks.git/refs/heads: fake_branch Only in /git/hooks.git/refs/heads: master Only in /git/hooks.git/refs: meta
клон копирует ссылки с пульта дистанционного управления и загружает их в подкаталог с именем "это ссылки, которые есть у пульта дистанционного управления".
зеркало копирует ссылки с пульта дистанционного управления и помещает их на свой собственный верхний уровень - оно заменяет свои собственные ссылки на ссылки пульта дистанционного управления.
Это означает, что когда кто-то вытаскивает из вашего зеркала и загружает ссылки зеркала в их подкаталог, они получат те же ссылки, что и на оригинале. Результат выборки из обновленное зеркало-это то же самое, что и выборка непосредственно из начального РЕПО.
подробное объяснение из документации GitHub на дублирование репозитория:
как и в случае с голым клоном, зеркальный клон включает все удаленные ветви и теги, но все локальные ссылки будут перезаписываться каждый раз при извлечении, поэтому он всегда будет таким же, как и исходный репозиторий.

Comments