Git klon yardım sayfası hakkında şunları söyleyebilir --mirror
:
Uzak deponun bir aynasını ayarlayın. Bu ima eder
--bare
.
Ancak, --mirror
klonun bir --bare
klondan nasıl farklı olduğu hakkında ayrıntılara girmez .
Git klon yardım sayfası hakkında şunları söyleyebilir --mirror
:
Uzak deponun bir aynasını ayarlayın. Bu ima eder
--bare
.
Ancak, --mirror
klonun bir --bare
klondan nasıl farklı olduğu hakkında ayrıntılara girmez .
Yanıtlar:
Fark kullanırken olmasıdır --mirror
, bütün hakemler kopyalanır olduğu gibi . Bu her şey anlamına gelir: uzaktan izleme dalları, notlar, referanslar / orijinaller / * (filtre kolundan yedeklemeler). Klonlanmış repo her şeye sahiptir. Ayrıca, uzaktan güncellemenin başlangıçtan itibaren her şeyi yeniden alacağı şekilde ayarlanır (kopyalanan referansların üzerine yazılır). Buradaki fikir, veri havuzunu yansıtmak, toplam bir kopyaya sahip olmaktır, böylece örneğin merkezi deponuzu birden fazla yerde barındırabilir veya yedekleyebilirsiniz. Çok daha zarif bir git yolu dışında, repoyu kopyalamayı düşünün.
Yeni belgeler hemen hemen tüm bunları söylüyor:
--mirror
Kaynak havuzun bir aynasını ayarlayın. Bu ima eder
--bare
. İle karşılaştırıldığında--bare
,--mirror
sadece hedefin yerel dallarına kaynağının yerel şubesi haritalar, bütün bu hakemler bir tarafından yazılır böyle bir refspec konfigürasyonda yukarı ve setleri (uzaktan dalları, notlar vb dahil) tüm ref eşleyengit remote update
hedef depoda .
Orijinal cevabım ayrıca çıplak bir klon ile normal (çıplak olmayan) bir klon arasındaki farkları da kaydetti - çıplak olmayan klon, uzaktan izleme dallarını kurar, sadece yerel bir dal HEAD
yaratırken, çıplak klon dalları doğrudan kopyalar.
Varsayalım kökenli birkaç şubesi (sahiptir master (HEAD)
, next
, pu
, ve maint
), bazı etiketler ( v1
, v2
, v3
), bazı uzak dalları ( devA/master
, devB/master
) ve diğer bazı ref ( refs/foo/bar
, refs/foo/baz
, notlar, miktarlarsa, diğer DEVS' ad, kim bilir olabilir).
git clone origin-url
(non-çıplak): Sen kopyalanan etiketlerinin tüm alacak, yerel bir şube master (HEAD)
uzak şube izleme origin/master
ve uzaktan dalları origin/next
, origin/pu
ve origin/maint
. İzleme dalları, böyle bir şey git fetch origin
yaparsanız, beklediğiniz gibi getirilecek şekilde ayarlanır . Tüm uzak dallar (klonlanmış uzaktan kumandada) ve diğer referanslar tamamen yok sayılır.
git clone --bare origin-url
: Sen Kopyalanan etiketleri, yerel şubeleri tüm alacak master (HEAD)
, next
, pu
, ve maint
, uzaktan izleme dalları. Yani, tüm dallar olduğu gibi kopyalanır ve tamamen bağımsızdır, tekrar getirme beklentisi yoktur. Tüm uzak dallar (klonlanmış uzaktan kumandada) ve diğer referanslar tamamen yok sayılır.
git clone --mirror origin-url
: Bu referanslardan her biri olduğu gibi kopyalanacaktır. Sen tüm etiketler yerel kollarının alırsınız master (HEAD)
, next
, pu
, ve maint
, uzaktan dalları devA/master
ve devB/master
diğer ref refs/foo/bar
ve refs/foo/baz
. Her şey tam olarak klonlanmış uzaktan kumandadaki gibi. Uzaktan izleme, git remote update
tüm aynaları silerseniz, aynayı silip yeniden kurmuş gibi tüm referansların üzerine yazılacak şekilde ayarlanır . Dokümanların başlangıçta söylediği gibi, bir ayna. Orijinaliyle değiştirilebilir, işlevsel olarak aynı bir kopya olması gerekiyordu.
$ git clone --mirror $URL
için kısa el
$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)
(Doğrudan buradan kopyalanır )
Mevcut kılavuz sayfanın nasıl koyduğu:
İle karşılaştırıldığında
--bare
,--mirror
sadece hedefin yerel dallarına kaynağının yerel şubesi haritalar, bütün bu hakemler bir tarafından yazılır böyle bir refspec konfigürasyonda yukarı ve setleri (uzaktan dalları, notlar vb dahil) tüm ref eşleyengit remote update
hedef depoda .
git fetch
Aslında aynı olması için bunu bir ile takip etmek zorunda kalacağınıza inanıyorum . Her neyse, bu bir çeşit cevap vermiyor - sorunun amacı "bir ayna uzaktan kumandası / klonu normal olandan nasıl farklı?"
basename
bir yolun dizin bölümünü kaplayan normal unix yardımcı programıdır ve $()
bash komutunun yerine kullanılır.
--mirror
içinde. Bu sadece ne yaptığını git remote add --mirror
açıklarsa kabul edilebilir bir cevap olacaktır .
Bugün git-2.0.0 ile yaptığım testler --mirror seçeneğinin kancaları, yapılandırma dosyasını, açıklama dosyasını, bilgi / hariç tutma dosyasını ve en azından test durumumda birkaç referans ( anladım.) Buna "orijinaliyle değiştirilebilir, işlevsel olarak özdeş bir kopya" demezdim.
-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
Bir Havuzu Çoğaltma ile ilgili GitHub belgelerinden nüanslı bir açıklama :
Çıplak bir klonda olduğu gibi, yansıtılmış bir klon tüm uzak dalları ve etiketleri içerir, ancak her getirdiğinizde tüm yerel referansların üzerine yazılır, bu nedenle her zaman orijinal havuzla aynı olacaktır.
--prune
Git uzaklığını çalıştırırken, artık uzaktan kumandada olmayan yerel başvuruları kaldırmak için de kullanmak isteyebilirsiniz .
Bir klon referansları uzaktan kumandadan kopyalar ve bunları 'bunlar uzaktan kumandanın sahip olduğu referanslardır' adlı bir alt dizine doldurur.
Bir ayna referansları uzaktan kumandadan kopyalar ve kendi üst seviyesine koyar - kendi referanslarını uzaktan kumanda ile değiştirir.
Bu, birisi aynanızdan çekip aynanın referanslarını alt dizinine doldurduğunda, orijinalindekiyle aynı referansları alacakları anlamına gelir. Güncel bir aynadan getirmenin sonucu, doğrudan ilk repodan getirmeyle aynıdır.
$ git clone --bare https://github.com/example
Bu komut yeninin kendisini $ GIT_DIR yapar. Ayrıca uzaktan kumandadaki dal başları, haritalama yapılmadan doğrudan ilgili yerel dal başlarına kopyalanır. Bu seçenek kullanıldığında, ne uzaktan izleme dalları ne de ilgili yapılandırma değişkenleri oluşturulur.
$ git clone --mirror https://github.com/example
Çıplak bir klonda olduğu gibi, yansıtılmış bir klon tüm uzak dalları ve etiketleri içerir, ancak her getirdiğinizde tüm yerel referansların (uzaktan izleme dalları, notlar vb. Dahil) üzerine yazılır, bu nedenle her zaman orijinal havuzla aynı olacaktır. .