Jaka jest różnica pomiędzy git clone -- mirror a git clone --bare
Strona pomocy git clone ma to do powiedzenia o --mirror
:
Skonfigurowanie serwera lustrzanego zdalnego repozytorium. Oznacza to
--bare
.
Ale nie wdaje się w szczegóły o tym, jak klon --mirror
różni się od klonu --bare
.
7 answers
Różnica polega na tym, że przy użyciu --mirror
, wszystkie refy są kopiowane jako . Oznacza to wszystko: zdalne śledzenie gałęzi, notatek, refs / originals / * (kopie zapasowe z filter-branch). Sklonowany repo ma wszystko. Jest również skonfigurowany tak, aby zdalna aktualizacja ponownie pobrała wszystko z źródła (nadpisując skopiowane refy). Chodzi o to, aby lustrzać repozytorium, mieć całkowitą kopię, tak aby można było na przykład hostować Centralne repo w wielu miejscach lub tworzyć kopie zapasowe. Pomyśl o prostym kopiowaniu repo, z wyjątkiem bardziej eleganckiego Gita.
Nowa dokumentacja W zasadzie mówi to wszystko:
--mirror
Skonfigurowanie serwera lustrzanego repozytorium źródłowego. Oznacza to
--bare
. W porównaniu do--bare
,--mirror
nie tylko mapuje lokalne gałęzie źródła do lokalnych gałęzi celu, mapuje wszystkie refy (w tym odległe gałęzie, notatki itp.) i ustawia konfigurację refspec taką, że wszystkie te refy są nadpisane przezgit remote update
w repozytorium docelowym.
Moja oryginalna odpowiedź zwróciła również uwagę na różnice pomiędzy gołym klonem a zwykłym (nie-gołym) klonem - klon nie-gołym ustawia zdalne gałęzie śledzące, tworząc tylko lokalną gałąź dla HEAD
, podczas gdy gołym klonem kopiuje gałęzie bezpośrednio.
Przypuśćmy, że pochodzenie ma kilka gałęzi (master (HEAD)
, next
, pu
, i maint
), niektóre znaczniki (v1
, v2
, v3
), niektóre odległe gałęzie (devA/master
, devB/master
), i inne refy (refs/foo/bar
, refs/foo/baz
, które mogą być notatkami, stashami, przestrzeniami nazw innych deweloperów, kto wie).
git clone origin-url
(nie-bare): otrzymasz skopiowane wszystkie znaczniki, lokalną gałąźmaster (HEAD)
śledzącą zdalną gałąźorigin/master
i zdalne gałęzieorigin/next
,origin/pu
, iorigin/maint
. Gałęzie śledzenia są skonfigurowane tak, że jeśli zrobisz coś podobnegogit fetch origin
, zostaną pobrane zgodnie z oczekiwaniami. Wszelkie zdalne gałęzie (w sklonowanym zdalnym) i inne refy są całkowicie ignorowane.git clone --bare origin-url
: otrzymasz wszystkie skopiowane tagi, lokalne gałęziemaster (HEAD)
,next
,pu
, imaint
, brak zdalnego śledzenia gałęzi. Oznacza to, że wszystkie gałęzie są kopiowane tak, jak jest i są skonfigurowane całkowicie niezależnie, bez oczekiwania ponownego pobierania. Wszelkie zdalne gałęzie (w sklonowanym zdalnym) i inne refy są całkowicie ignorowane.git clone --mirror origin-url
: każdy z tych refów zostanie skopiowany tak, jak jest. Dostaniesz wszystkie tagi, lokalne oddziałymaster (HEAD)
,next
,pu
, imaint
, odległe gałęziedevA/master
idevB/master
, inne refyrefs/foo/bar
irefs/foo/baz
. Wszystko jest dokładnie takie, jak było w sklonowanym pilocie. Zdalne śledzenie jest skonfigurowane tak, że jeśli uruchomiszgit remote update
Wszystkie refy zostaną nadpisane z origin, tak jakbyś właśnie usunął lustro i odzyskał je. Jak pierwotnie powiedzieli lekarze, to lustro. Ma być funkcjonalnie identyczną kopią, zamienną z oryginałem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-07 12:59:23
$ git clone --mirror $URL
Jest krótką ręką dla
$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)
(skopiowane bezpośrednio z tutaj )
Jak przedstawia to aktualna strona podręcznika:
W porównaniu do
--bare
,--mirror
nie tylko mapuje lokalne gałęzie źródła do lokalnych gałęzi celu, mapuje wszystkie refy (w tym odległe gałęzie, notatki itp.) i ustawia konfigurację refspec tak, że wszystkie te refy są nadpisywane przezgit remote update
w repozytorium docelowym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-09 01:12:24
Moje dzisiejsze testy z git-2.0.0 wskazują, że opcja -- mirror nie kopiuje hooków, pliku konfiguracyjnego, pliku opisu, pliku info / exclude, a przynajmniej w moim przypadku testowym kilka refów (których nie rozumiem.) Nie nazwałbym tego "funkcjonalnie identyczną kopią, wymienną z oryginałem."
-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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-17 18:05:09
Klon kopiuje refy z pilota i wpycha je do podkatalogu o nazwie 'są to refy, które posiada pilot'.
Lustro kopiuje refy z pilota i umieszcza je na swoim własnym najwyższym poziomie-zastępuje własne refy z tych z pilota.
Oznacza to, że gdy ktoś wyciągnie z twojego lustra i wypchnie refy lustra do podkatalogu, otrzyma te same refy, co w oryginale. Wynikiem pobierania Z up-to-date mirror jest to samo, co pobieranie bezpośrednio z pierwotnego repo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 02:33:47
Niuansowe Wyjaśnienie z Dokumentacji GitHub na temat powielania repozytorium :
Podobnie jak w przypadku gołego klona, klon lustrzany zawiera wszystkie zdalne gałęzie i znaczniki, ale wszystkie lokalne odniesienia będą nadpisywane za każdym razem, gdy pobierasz, więc zawsze będzie taki sam jak oryginalne repozytorium.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 17:25:15
Dodaję zdjęcie, pokazuję config
różnicę między lustrem a gołym.
Lewa jest naga, prawa to lustro. Możesz być czysty, plik konfiguracyjny mirrora ma klucz fetch
, co oznacza, że możesz go zaktualizować, przez git remote update
lub git fetch --all
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 08:20:08
$ git clone --bare https://github.com/example
To polecenie uczyni nowy katalog "example
" samym $GIT_DIR (zamiast example/.git
). Również głowice odgałęzień na zdalnym są kopiowane bezpośrednio do odpowiednich lokalnych głowic odgałęzień, bez mapowania. Gdy ta opcja jest używana, nie są tworzone ani gałęzie zdalnego śledzenia, ani powiązane zmienne konfiguracyjne.
$ git clone --mirror https://github.com/example
Podobnie jak w przypadku gołego klona, klon lustrzany zawiera wszystkie zdalne gałęzie i tagi, ale wszystkie lokalne odniesienia (w tym gałęzie zdalnego śledzenia, notatki itp.) will być nadpisywane za każdym razem, gdy pobierasz, więc zawsze będzie to to samo, co oryginalne repozytorium.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-31 13:03:44