Git deposunda nasıl bağlantılı bağımlılıklar olabilir?


149

Senaryolarımda genellikle kendi depoları olan kütüphaneleri (benimki veya başkalarının) kullanıyorum. Reporumdaki kopyaları çoğaltmak ve her yeni sürüm çıktığında bunları güncellemek istemiyorum. Ancak, biri repoyu klonladığında, hala yerel olarak çalışmalı ve bağlantıları kopmuş olmamalıdır.

Ne yapabileceğim hakkında bir fikrin var mı?

Yanıtlar:


212

Git'te alt modüllerle bunu yapabilirsiniz. Deponuzda şunları yapın:

git submodule add path_to_repo path_where_you_want_it

Dolayısıyla, kütüphanenin veri havuzunun URL'si git://github.com/example/some_lib.gitvarsa lib/some_libve projenizde olmasını istiyorsanız, şunu girersiniz:

git submodule add git://github.com/example/some_lib.git lib/some_lib

Bunun deponuzdaki en üst düzey dizinden yapılması gerektiğini unutmayın. Bu yüzden cdönce koyduğunuz dizine girmeyin.

Bir alt modül ekledikten sonra veya birisi deponuzdan yeni bir ödeme yaptığında şunları yapmanız gerekir:

git submodule init
git submodule update

Ve sonra eklediğiniz tüm alt modüller, sahip olduğunuz aynı revizyonda kontrol edilecektir.

Kütüphanelerden birinin daha yeni bir sürümüne güncellemek istediğinizde cd, alt modüle girin ve çekin:

cd lib/some_lib
git pull

Sonra, bir git statusyaptığınızda lib/somelibdeğiştirilen bölümde listelenmiş görmelisiniz . Bu dosyayı ekleyin, taahhüt edin ve güncel kalın. Bir ortak çalışan bu taahhüdü depolarına çektiğinde, tekrar lib/somelibçalışana kadar değiştirilmiş olarak görürler git submodule update.


2
Cevabınız için teşekkürler, iptal edildi! (ve muhtemelen yarın kabul edecek) Bağımlılık olarak diğer depodan yalnızca bir dosya eklemenin bir yolu var mı? Yoksa bir klasör mü olmalı?
Lea Verou

2
Bir alt modül olarak izlemek istiyorsanız (ve böylece güncellemeleri kolayca çekebiliyorsanız) tüm depoyu çekmeniz gerekir. Diğer VCS'lerin aksine, git gerçekten sadece üst düzey depo ile uğraşmak istiyor.
Emily

7
bir alt modülün neye iyi geldiğini ve olası sorunları çözmenin yollarını öğrenmek için bunu okuyun . ve bununla ilgili bir tartışma .
minghua

1
sahip olduğunuz başka bir repoyu alt modül olarak içe aktardığınızı varsayalım. Alt modüldeki yerel değişikliklerinizle orijinal repoda değişiklik yapabilir misiniz? Bir hata bulduğunuzu ve orijinali güncellemeniz gerektiğini varsayalım?
andrevenancio

3
Bu eski bir cevap olduğunu biliyorum, ama git submodules git submodule update --remotedaha karmaşık projeler için olsa daha fazla bayrak kullanmanızı öneririz kullanılarak güncellenebilir . Ben kullanımgit submodule update --remote --recursive --init
Chris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.