(Git 2.22, 2. Çeyrek 2019 piyasaya sunuldu git submodule set-branch --branch aBranch -- <submodule_path>
)
Not o bir varsa mevcut alt modülü değil henüz bir şube izleme (daha sonra, sen git 1.8.2+ varsa ):
Ana repo, alt modülünün artık bir dalı izlediğini bildiğinden emin olun:
cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>
Alt modülünüzün aslında bu dalın en sonuncusunda olduğundan emin olun:
cd path/to/your/submodule
git checkout -b branch --track origin/branch
# if the master branch already exist:
git branch -u origin/master master
( 'köken' ismi olmak Repo üst uzaktan alt modülü. klonlanmıştır
A git remote -v
bu alt modülü gösterecektir içinde. Genellikle, bir 'kökenli')
Ana modülünüzde alt modülünüzün yeni durumunu kaydetmeyi unutmayın:
cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking a branch"
Bu alt modül için sonraki güncelleme --remote
seçeneği kullanmak zorunda kalacaktır :
# update your submodule
# --remote will also fetch and ensure that
# the latest commit from the branch is used
git submodule update --remote
# to avoid fetching use
git submodule update --remote --no-fetch
Not bununla Git 2.10+ (Q3 2016), sen kullanabilirsiniz .
şube adı olarak ':
Şube adı olarak kaydedilir submodule.<name>.branch
içinde .gitmodules
için update --remote
. Alt modüldeki dal adının, geçerli havuzdaki geçerli dal ile aynı ad olması gerektiğini belirtmek için
özel bir değeri .
kullanılır .
Fakat, yorumladı olarak tarafından LubosD
İle git checkout
takip şube adı "ise, .
", bu kararsız çalışması öldürecek! Bunun yerine
kullanın git switch
.
Bu Git 2.23 (Ağustos 2019) veya daha fazlası anlamına gelir.
Bkz. " Kafası karıştıgit checkout
"
Bir şubeyi izleyerek tüm alt modüllerinizi güncellemek istiyorsanız:
git submodule update --recursive --remote
Her güncellenmiş alt modül için sonucun Dan Cameron'un cevabında belirttiği gibi neredeyse her zaman bağımsız bir HEAD olacağını unutmayın .
( Clintm notlar yorumlarda koşarsan, git submodule update --remote
ve elde edilen sha1 alt modülü şu anda şube aynıdır, bu her şeyi ve bırakın submodule hala "o dala" değil müstakil kafa durumda olmayacaktır. )
Şubenin gerçekten teslim alındığından (ve ana repo için alt modülü temsil eden özel girişin SHA1'inde değişiklik yapmayacağından ) emin olmak için şunları önerir:
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git switch $branch'
Her alt modül yine de aynı SHA1'e başvurur, ancak yeni taahhütler yaparsanız, alt modülün izlemesini istediğiniz dal tarafından referans verileceği için bunları itebilirsiniz.
Bir alt modül içindeki itmeden sonra, ana repoya geri dönmeyi, değiştirilen alt modüller için yeni SHA1'i eklemeyi, taahhüt etmeyi ve itmeyi unutmayın.
Kullanımına dikkat $toplevel
tavsiye yorumlarda tarafından Alexander Pogrebnyak .
$toplevel
Mayıs 2010'da git1.7.2'de tanıtıldı: f030c96 taahhüdü .
üst düzey dizinin mutlak yolunu içerir (nerede .gitmodules
).
dtmland
yorum ekler :
Foreach betiği, bir dalı takip etmeyen alt modüllerin çıkışını yapamaz.
Ancak, bu komut her ikisini de verir:
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout master || git switch $branch' –
Aynı komut ama okunması daha kolay:
git submodule foreach -q --recursive \
'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; \
[ "$branch" = "" ] && \
git checkout master || git switch $branch' –
umläute , dtmland'ın komutunu yorumlarda basitleştirilmiş bir sürümle geliştirir :
git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
birden fazla satır:
git submodule foreach -q --recursive \
'git switch \
$(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
Git 2.26'dan (Q1 2020) önce, alt modüllerde tekrar tekrar güncellemeler getirmesi söylenen bir getirme kaçınılmaz olarak çıktı yığınları üretir ve hata mesajlarını tespit etmek zorlaşır.
Komut, işlemin sonunda hataları olan alt modülleri numaralandırmak için öğretildi .
Bkz . Emily Shaffer ( ) tarafından taahhüt edilen 0222540 (16 Ocak 2020 ) . (Göre Birleştirilmiş Junio Cı Hamano - - içinde b5c71cc tamamlama , 5 Şubat 2020)nasamuffin
gitster
fetch
: alt modül getirme sırasında başarısızlığı vurgula
İmzalayan: Emily Shaffer
Çok sayıda alt modül olduğunda bir alt modül alımının başarısız olduğu durumlarda, yalnız başarısız alt modül alımından kaynaklanan hata, birden fazla getirme geri düşerse diğer alt modüllerde etkinlik altına gömülür fetch-by-oid
.
Kullanıcı bir şeylerin yanlış gittiğinin ve nerede olduğunun farkında olması için geç bir hata verin .
Çünkü fetch_finish()
sadece run_processes_parallel,
muteksleme ile eşzamanlı olarak çağrılmak gerekli değildir submodules_with_errors
.