Git alt modülü vs Git klonu


18

GitHub'da açık kaynaklı bir proje üzerinde çalışıyorum.

Birkaç harici kütüphanenin bir kopyasına sahip olduğu bir alt dizini / Satıcısı vardır . Projenin orijinal sürdürücüsü, bu dizini arada bir yeni dış kütüphanenin kopyasıyla güncelledi.

Bir geliştirici bana bu yerine fikri ile bir çekme isteği göndermek kopyasını tarafından git altmodülün .

Ve bunun iyi bir fikir olup olmadığını düşünüyorum.

Git submodule Artıları:

  • Alt modüller özellikle benzer senaryolar için tasarlanmıştır
  • Bir sonraki güncelleme sırasında üzerine yazılacak Satıcıya yanlışlıkla taahhüt olasılığını ortadan kaldırır

Git submodule Eksileri:

  • Git submodülleri, karmaşıklığı sürdürücüden projeyi klonlayacak / çekecek bir kişiye itiyor gibi görünüyor (projeyle çalışmaya başlamak için klonladıktan sonra ek adımlar gerekir: "git submodule init", "git submodule update"

Bu konudaki fikriniz nedir?

Bir şey daha. Bu sorun, çok sınırlı dış bağımlılıkları olan makul küçük boyutlu bir kütüphanedir. Bence şimdilik herhangi bir araç aşırıya kaçabilir.


4
Alternatif olarak git clone --recursivealt modül komutlarını yapabilirler ve sonra yapmak zorunda değildirler. Bu tidbitten hiç kimse bahsetmemişti; alt modüllere sahip olduğunu bildiğim çoğu insan bunu README'de tanıttı.
Levi Morrison

Yanıtlar:


9

Bir alt modüle bir alternatif kullanmaktır git subtree. Bu git submodule, son kullanıcıya karmaşıklığı zorlamadan fayda sağlar . Üçüncü taraf deposu ana proje ağacıyla birleştirilir, ancak aşağıdakileri yapabileceğiniz şekilde depolanan meta veriler vardır:

  • ilginç değişiklikler yapılmışsa daha sonra üçüncü taraf deposunu çıkarın
  • üçüncü taraf deposundaki yeni güncellemeleri birleştir (not birleştirme , üzerine yazma değil)

Alt modülleri anlayacak kadar sofistike olmayan Git kullanıcıları için, alt ağaç yaklaşımı projenizin bir klonunu diğer klonlardan daha zor hale getirmez. Belgelerden kısa bir açıklama:

Alt ağaçlar, isteğe bağlı olarak alt projenin tüm geçmişini içeren alt projelerin ana projenin bir alt dizinine dahil edilmesine izin verir.

Örneğin, bir kitaplığın kaynak kodunu uygulamanızın alt dizini olarak ekleyebilirsiniz.

Alt ağaçlar, aynı görev için olan alt modüller ile karıştırılmamalıdır. Alt modüllerin aksine, alt ağaçların deponuzda özel yapılara (.gitmodule dosyaları veya gitlinkler gibi) ihtiyacı yoktur ve deponuzun son kullanıcılarını özel bir şey yapmaya veya alt ağaçların nasıl çalıştığını anlamaya zorlamazlar. Alt ağaç, projenizle birlikte istediğiniz şekilde işlenebilen, dallanan ve birleştirilebilen bir alt dizindir.

Alt modülleri kullanarak iş yerinde bir proje oluşturmuştum ve herkesin klonlarında alt modülleri güncel tutma sorunları çok fazla işti. Geçenlerde her yerde alt ağaç kullanmaya geçtim ve bu sorunlar kayboldu.

Git-subtree dosyasının git/contribdizinin bir parçası olduğunu ve ayrı olarak yüklenmesi gerektiğini unutmayın.


4

Alt modüllerin kullanılmasının bir dezavantajı, Github'daki (ve diğer birçok hizmette) tarballların veya zip arşivlerinin alt modüllerin kaynaklarını içermemesidir. Yani arşivler müstakil değildir. Havuz küçükse ve bir JavaScript kitaplığına bağlı olarak statik bir HTML sitesi gibi bir oluşturma komut dosyasına sahip değilse bu bir sorundur.


3

Bu, alt modülleri kullanmak için ideal bir yerdir. Deponuzun boyutunu ve karmaşıklığını azaltır ve harici kitaplıkları yeni bir sürüme güncellemeyi kolaylaştırır.

Nasıl kullanılacağını anlamaları zor değildir ve bu durumda oldukça yaygın olarak kullanılırlar, bu nedenle projenin README'sinde alt modülleri ve ne yapacağınızı not edin ve insanlar anlayabilmelidir. dışarı. Bir alt modül ile bir havuzla ilk karşılaştığımda, onu aldım ve 10 ila 15 dakika içinde çalıştım ve o zamandan beri ne yapacağımı bulmakla ilgili bir sorun yaşamadım.


1
Buna ek olarak, uygulamanız başlatılamazsa, alt modülün başlatıldığını doğrulamak için bir onay işareti koymak isteyebilirsiniz - ve başlamadıysa kolay bir hata mesajı verin.
Jonathan Rich

1
Ayrıca Lekensteyn'in alt modül dosyaları olmayan zip arşivleri hakkındaki cevabına bakınız. Bu, alt modüllerin kodu herkese açık olarak sağlıyorsanız belki de en iyi yaklaşım olmadığı anlamına gelir, ancak klonlanması garanti edilen özel kod için iyidir. Aksi takdirde, alt ağaçları tercih edin.
Mühendis

3

Alt modüllerin kullanılması, kodda yerel değişiklikler yapmanızı önler ve harici depoya bağımlılık yaratır. Eğer değilseniz emin olacak asla bir kütüphane özelleştirmek istiyorsanız veya yerel hata düzeltmeleri yapmak ve harici sunucu olacak emin olabilirsiniz her zaman onlar gitmek için yoludur yeni bir kopyasını klonlamak istediğinizde kullanılabilir.

Kısacası - sadece kütüphaneleri mi kullanmak istiyorsunuz yoksa bunları kod tabanınızın bir parçası olarak mı görüyorsunuz? Eğer 'sizin' kodunuz değilse, neden sadece yüklemeniz gereken bir şey değil, sürüm kontrolünde?


6
Alt modüller yerel değişiklikler yapmanızı engellemez. Aksine, bu değişiklikleri izlemenize ve farklı projelerde kütüphanenin farklı sürümlerini (ince ayarlarınız veya kütüphane sürümleriniz) kullanmanıza izin verir.
Steve Fallows
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.