Geliştirdiğimiz diğer birçok kütüphaneye bağımlılıkları olan birkaç büyük projeyi yönetmek için git alt modüllerini kullanıyoruz. Her kütüphane, bağımlı projeye bir alt modül olarak getirilen ayrı bir depodur. Geliştirme sırasında, genellikle her bağımlı alt modülün en son sürümünü almak isteriz.
Git'in bunu yapmak için yerleşik bir komutu var mı? Eğer yoksa, bunu yapabilecek bir Windows toplu iş dosyası veya benzerine ne dersiniz?
Eğer bir repoyu ilk kez kontrol ediyorsanız, önce --init
kullanmanız gerekir:
git submodule update --init --recursive
git 1.8.2** veya üzeri sürümler için, uzak dalların en son ipuçlarına güncellemeyi desteklemek üzere --remote
seçeneği eklendi:
git submodule update --recursive --remote
Bu, .gitmodules' veya
.git/config' dosyalarında belirtilen herhangi bir "non default" dalına saygı gösterme avantajına sahiptir (eğer varsa, varsayılan origin/master'dır, bu durumda buradaki diğer cevaplardan bazıları da işe yarayacaktır).
git 1.7.3** veya üzeri için kullanabilirsiniz (ancak güncellemenin ne yaptığına ilişkin aşağıdaki sorunlar hala geçerlidir):
git submodule update --recursive
ya da:
git pull --recurse-submodules
alt modüllerinizi deponun işaret ettiği yerine en son işlenenlere çekmek istiyorsanız.
Ayrıntılar için git-submodule(1) bölümüne bakın
Not: Bu 2009 yılına aittir ve o zaman iyi olabilirdi ancak şimdi daha iyi seçenekler var.
Bunu kullanıyoruz. Adı git-pup
:
#!/bin/bash
# Exists to fully update the git repo that you are sitting in...
git pull && git submodule init && git submodule update && git submodule status
Sadece uygun bir bin dizinine (/usr/local/bin) koyun. Windows kullanıyorsanız, çalışması için sözdizimini değiştirmeniz gerekebilir :)
Güncelleme:
Orijinal yazarın tüm alt modüllerin HEAD'lerinin çekilmesi hakkındaki yorumuna yanıt olarak -- bu iyi bir soru.
Gitin dahili olarak bunun için bir komuta sahip olmadığından oldukça eminim. Bunu yapmak için, bir alt modül için HEAD'in gerçekte ne olduğunu tanımlamanız gerekir. Bu,
master`ın en güncel dal olduğunu söylemek kadar basit olabilir, vb...
Bunu takiben, aşağıdakileri yapan basit bir komut dosyası oluşturun:
git submodule status
kontrol edin. Çıktı satırlarının ilk karakteri bunu gösterir. Eğer bir alt depo değiştirilmişse, devam etmek İSTEMEYEBİLİRSİNİZ.git checkout master && git pull
komutunu çalıştırın. Hata olup olmadığını kontrol edin.Bu tarzın git alt modüllerinin tasarlanma amacı olmadığını belirtmek isterim. Tipik olarak, "LibraryX" sürümünün "2.32" olduğunu ve ben "yükselt" diyene kadar bu şekilde kalacağını söylemek istersiniz.
Bu, bir anlamda, açıklanan komut dosyası ile yaptığınız şeydir, ancak daha otomatiktir. Dikkat gereklidir!
Güncelleme 2:
Windows platformundaysanız, bu alanlarda çok yetenekli olduğu için komut dosyasını uygulamak için Python'u kullanmaya bakmak isteyebilirsiniz. Eğer unix/linux kullanıyorsanız, o zaman sadece bir bash betiği kullanmanızı öneririm.
Açıklamaya ihtiyacınız var mı? Sadece bir yorum gönderin.
Sanırım bunu yapmak için bir senaryo yazmanız gerekecek. Dürüst olmak gerekirse, bunu yapmak için python yükleyebilirim, böylece her dizine cd
yapmak ve uygun komutları vermek için os.walk
kullanabilirsiniz. Batch dışında python veya başka bir betik dili kullanmak, betiği değiştirmek zorunda kalmadan alt projeleri kolayca eklemenize / kaldırmanıza olanak tanır.