Gelecek git1.8.4'te (Temmuz 2013) yenilikler :
" git submodule update
" isteğe bağlı olarak alt modül havuzlarını sığ biçimde klonlayabilir.
(Ve git 2.10 3. Çeyrek 2016 bunu ile kaydetmeyi sağlar git config -f .gitmodules submodule.<name>.shallow true
.
Bu cevabın sonuna bakınız)
Bkz. Taahhüt 275cd184d52b5b81cb89e4ec33e540fb2ae61c1f :
Ekle --depth
ardından klon komuta geçirilir "git altmodülün" nin eklenti ve güncelleme komutları seçeneği. Bu, alt modül (ler) çok büyük olduğunda ve en son taahhütten başka bir şeyle gerçekten ilgilenmediğinizde yararlıdır.
Testler eklenir ve "alt modül güncellemesi pwd'deki sembolik bağlantıları işleyebilir" üzerindeki test dosyasının geri kalanına uyacak şekilde bazı girinti ayarlamaları yapılmıştır.
İmzalayan: Fredrik Gustafsson <iveqy@iveqy.com>
Kabul eden: Jens Lehmann<Jens.Lehmann@web.de>
Bu şu anlama gelir:
git submodule add --depth 1 -- repository path
git submodule update --depth -- [<path>...]
İle:
--depth::
Bu seçenek add
ve update
komutları için geçerlidir .
Geçmişi belirtilen sayıda düzeltmeye kesilmiş bir 'sığ' klon oluşturun.
atwyman yorumlarda ekliyor :
Anlayabildiğim kadarıyla bu seçenek master
çok yakından takip etmeyen alt modüller için kullanılamaz . Derinlik 1'i ayarlarsanız submodule update
, ancak istediğiniz alt modül taahhüdü en son mastersa başarılı olabilir. Aksi takdirde " fatal: reference is not a tree
" alırsınız .
Bu doğru.
Yani git 2.8'e kadar (Mart 2016). 2.8 ile, submodule update --depth
SHA1'e uzaktan repo HEAD'lerinden birinden doğrudan ulaşılabilse bile, başarılı olmak için bir şans daha var.
Bakınız Stefan Beller ( ) tarafından fb43e31 (24 Şub 2016 ) .
Yardım eden: Junio C Hamano ( ) . (Göre Birleştirilmiş - Junio Cı Hamano - içinde 9671a76 tamamlama 2016, 26 Şubat)stefanbeller
gitster
gitster
submodule: doğrudan sha1 getirerek gerekli sha1'i getirmek için daha çok deneyin
Gerrit'te bir alt modülü de güncelleyen bir değişikliği incelerken, yaygın bir inceleme uygulaması, yamayı test etmek için yerel olarak indirip kiraz seçmektir.
Bununla birlikte, yerel olarak test edilirken, ' git submodule update
' doğru alt modül sha1 getirilemediğinden, alt modüldeki ilgili taahhüt henüz proje geçmişinin bir parçası değil, aynı zamanda sadece önerilen bir değişikliktir.
Eğer $sha1
varsayılan bir parçası değildi biz almaya çalışın getirme $sha1
doğrudan . Ancak bazı sunucular sha1 tarafından doğrudan getirmeyi desteklemez, bu da git-fetch
hızlı bir şekilde başarısızlığa neden olur.
Hala eksik olan sha1 zaten ödeme aşamasında daha sonra başarısızlığa yol açacağı için kendimizi başarabiliriz, bu yüzden burada başarısız olmak alabileceğimiz kadar iyidir.
MVG işaret yorumlarda için taahhüt fb43e31 (git 2.9 2016 Şubat)
Bana öyle geliyor ki, fb43e31 , SHA1 kimliğinin eksik taahhüdünü talep ediyor gibi görünüyor , bu nedenle sunucudaki uploadpack.allowReachableSHA1InWant
ve uploadpack.allowTipSHA1InWant
ayarları muhtemelen bunun çalışıp çalışmadığını etkileyecektir. Bugün git listesine
bir yazı yazdım , bazı senaryolarda, yani taahhüdün de bir etiket olması durumunda, sığ alt modüllerin kullanımının nasıl yapılabileceğine işaret ettim .
Bekleyelim ve görelim.
Bu fb43e31 belirli bir SHA1 için getirme varsayılan dal getirme sonra bir geri dönüş yaptı neden olduğunu tahmin ediyorum.
Bununla birlikte, “--depth 1” durumunda, erken iptal etmenin mantıklı olacağını düşünüyorum: Listelenen referanslardan hiçbiri talep edilenle eşleşmiyorsa ve SHA1 tarafından sormak sunucu tarafından desteklenmiyorsa, bir şey getirmektir, çünkü alt modül gereksinimini her iki şekilde de karşılayamayız.
Ağustos 2016 Güncellemesi (3 yıl sonra)
Git 2.10 (3. Çeyrek 2016) ile şunları yapabilirsiniz:
git config -f .gitmodules submodule.<name>.shallow true
Daha fazla bilgi için bkz. " Ek ağırlık olmadan Git alt modülü ".
Git 2.13 ( 2.Çeyrek 2017) Sebastian Schuberth ( sschuberth
) tarafından 8d3047c (19 Nis 2017) taahhüdünde bulunuldu .
(Göre Birleştirilmiş Sebastian Schuberth - sschuberth
- içinde 8d3047c tamamlama , 20 Nisan 2017)
bu alt modülün bir klonu, sığ bir klon olarak gerçekleştirilecektir (geçmiş derinliği 1 olan)
Ancak, Ciro Santilli yorumları ekliyor (ve cevabındaki detaylar )
shallow = true
üzerinde .gitmodules
de etkiler kullanırken referans uzaktan BAŞ tarafından izlenen --recurse-submodules
hedef bir şube tarafından gösterilen taahhüt bile, ve sen koymak bile branch = mybranch
üzerinde .gitmodules
de.
Git 2.20 (Q4 2018) HEAD:.gitmodules
, .gitmodules
dosya çalışma ağacında eksik olduğunda blobdan okunacak şekilde güncellenen alt modül desteğinde gelişir .
Bkz 2b1257e işlemek , 76e9bdc taahhüt (25 Ekim 2018) ve b5c259f işlemek , 23dd8f5 işlemek , b2faad4 işlemek , 2502ffc işlemek , 996df4d taahhüt , d1b13df işlemek , 45f5ef3 taahhüt , bcbc780 taahhüt tarafından (05 Eki 2018) Antonio Ospite ( ao2
) .
(Tarafından Birleştirilmiş - Junio C Hamano gitster
- içinde abb4824 taahhüt 2018 13 Kasım,)
submodule
: .gitmodules
çalışma ağacında değilken okumayı destekleyin
Ne zaman .gitmodules
dosya çalışma ağacında mevcut değildir, dizinden ve mevcut şubesinden içeriği kullanmayı deneyin.
Bu, dosyanın deponun bir parçası olduğu, ancak bir nedenden dolayı, örneğin seyrek bir ödeme nedeniyle teslim alınmadığı durumu kapsar.
Bu sayede en azından kullanmayı kolaylaştırır ' git submodule
' komutları okumakgitmodules
dolu çalışma ağaç doldurma olmadan yapılandırma dosyası.
İçin yazmak .gitmodules
yine de dosyanın teslim alınmasını gerektirir, bu yüzden aramadan önce dosyayı kontrol edin config_set_in_gitmodules_file_gently
.
Güvenli bir şekilde yazılamadığında git-submodule.sh::cmd_add()
" git submodule add
" komutunun nihai hatasını tahmin etmek için de benzer bir onay ekleyin .gitmodules
; bu, komutun havuzu sahte bir durumda bırakmasını önler (örn. alt modül deposu klonlanmıştır, ancak başarısız .gitmodules
olduğu için güncellenmemiştir config_set_in_gitmodules_file_gently
).
Ayrıca, config_from_gitmodules()
şimdi global nesne deposuna eriştiği için, işlevi çağıran tüm kod yollarını, global nesne deposuna eşzamanlı erişime karşı korumak gerekir.
Şu anda bu sadece olur builtin/grep.c::grep_submodules()
, bu yüzden grep_read_lock()
ilgili kodu çağırmadan önce arayın
config_from_gitmodules()
.
NOT: Bu yeni özelliğin henüz düzgün çalışmadığı nadir bir durum vardır: .gitmodules
çalışma ağacında olmayan iç içe alt modüller .
Not: Git 2.24 (Q4 2019), bir alt modül sığ klonlanırken olası bir segfaultu düzeltir.
Ali Utku Selen ( ) tarafından taahhüt edilen ddb3c85 (30 Eyl 2019) bölümüne bakınız . (Tarafından Birleştirilmiş - Junio C Hamano - içinde 678a9ca taahhüt 2019, 09 Eki)auselen
gitster
Git 2.25 (Q1 2020), git submodule update
belgeleri açıklar .
Philippe Blain ( ) tarafından taahhüt edilen f0e58b3 (24 Kas 2019) bölümüne bakınız . (Göre Birleştirilmiş - Junio Cı Hamano - içinde ef61045 tamamlama 2019 05 Ara)phil-blain
gitster
doc
: 'git submodule update'in eksik taahhütleri aldığını belirtin
Yardım eden: Junio C Hamano
Yardım eden: Johannes Schindelin
İmzalayan: Philippe Blain
Süper projeye kaydedilen SHA-1 bulunmazsa, ' git submodule
güncelleme' alt modül uzaktan kumandasından yeni taahhütler getirecektir . Bu belgelerde belirtilmemiştir.
Uyarı: Git 2.25 (Q1 2020) ile " git clone --recurse-submodules
" ve alternatif nesne deposu arasındaki etkileşim kötü tasarlanmıştı.
Dokümantasyon ve kod, kullanıcılar hata gördüğünde daha net önerilerde bulunmayı öğretmiştir.
Bkz. Taahhüt 4f3e57e , taahhüt: 10c64a0 (02 Aralık 2019), Jonathan Tan ( jhowtan
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 5dd1d59 tamamlama 2019 10 Ara)
submodule--helper
: önemli alternatif hata hakkında tavsiye
İmzalayan: Jonathan Tan
Kabul eden: Jeff King
Bir süper .gitmodules
projeyi tanımlanmış bazı sığ modüllerle özyineli olarak klonlarken, sonra " --reference=<path>
" ile yeniden klonlarken bir hata oluşur. Örneğin:
git clone --recurse-submodules --branch=master -j8 \
https://android.googlesource.com/platform/superproject \
master
git clone --recurse-submodules --branch=master -j8 \
https://android.googlesource.com/platform/superproject \
--reference master master2
ile başarısız:
fatal: submodule '<snip>' cannot add alternate: reference repository
'<snip>' is shallow
Süper projenin alternatifinden hesaplanan bir alternatif eklenemiyorsa, bu durumda veya başka bir durumda, " submodule.alternateErrorStrategy
" yapılandırma seçeneğini yapılandırma ve klonlama sırasında " --reference-if-able
" yerine " " kullanma hakkında bilgi verin --reference
.
Ayrıntılı olarak:
Git 2.25 (Q1 2020) ile, "git clone --recurse-submodules" ile alternatif nesne deposu arasındaki etkileşim kötü tasarlanmıştı.
Doc
: açıklamak submodule.alternateErrorStrateji
İmzalayan: Jonathan Tan
Kabul eden: Jeff King
Taahhüt 31224cbdc7 (" clone
: özyinelemeli ve başvuru seçeneği alt modül alternatiflerini tetikler", 2016-08-17, Git v2.11.0-rc0 - toplu iş # 1'de listelenen birleştirme ) Git'e bir süper projede yapılandırma seçeneklerini desteklemesi için " " ve " " .submodule.alternateLocation
submodule.alternateErrorStrategy
Bir üst projede " submodule.alternateLocation
", " " olarak yapılandırılırsa superproject
, bu üst projenin bir alt modülü klonlandığında, bunun yerine üst projenin o alt modülünün benzer alternatif yolunu hesaplar ve ona $GIT_DIR/objects/info/alternates
başvurur.
" submodule.alternateErrorStrategy
" Seçeneği, bu alternatife başvurulamazsa ne olacağını belirler.
Bununla birlikte, klonun, bu seçenek "kalıp" olarak ayarlanmadığında ( 31224cbdc7'deki testlerde görülebileceği gibi) alternatif belirtilmemiş gibi devam ettiği açık değildir .
Bu nedenle, uygun şekilde belgeleyin.
Yapılandırma alt modül belgeler şimdi içerir:
submodule.alternateErrorStrategy::
Alt modülün üzerinden hesaplandığı gibi alternatiflerle hataların nasıl ele alınacağını belirtir submodule.alternateLocation
.
Olası değerler ignore
, info
, die
.
Varsayılan değer die
.
İçin ayarlanmış eğer Not ignore
veya info
ve bilgisayarlı alternatif bir hata varsa, klon ilerler hiçbir alternatif belirtilen sanki .
git submodule add/update
" artık alt modül havuzlarını sığ bir şekilde klonlayabilir! Aşağıdaki cevabımı