Git submodule ve subtree kullanımı arasındaki kavramsal farklar nelerdir?
Her biri için tipik senaryolar nelerdir?
Git submodule ve subtree kullanımı arasındaki kavramsal farklar nelerdir?
Her biri için tipik senaryolar nelerdir?
Yanıtlar:
Bağlantıların her zaman harici repo BAŞKANI'na işaret etmesini istersem ne olur?
Bir alt modül uzak deposunun bir dalının HEAD'ini takip etmek için bir alt modül yapabilirsiniz:
o git submodule add -b <branch> <repository> [<path>]
. (izlenecek bir dal belirtmek için)
o git submodule update --remote
alt modülün içeriğini <repository>/<branch>
varsayılan olarak en son HEAD'e güncelleyecektir origin/master
. Ana projeniz yine --remote
de kullanılsa bile alt modülün HEH'lerinin karmasını izleyecektir .
add -b
ve --remote
gereği, bundan sonra güncelleme komutları üzerinde alt modül güncelleme belgelerine . Bu durumda, -b
yüksek lisans başlığını izlemek için gerçekten gerekli mi?
-b
, alt modül için doğru .gitmodule meta verilerini üretmek için kullanılır (a'ya eşdeğerdir git config -f .gitmodules submodule.<path>.branch <branch>
).
--remote
- --remote
eğer -b
kullanılmamışsa da çalışır add
. Her iki durumda da güncelleme, alt modülü barındıran ana repoda bir taahhüde neden olacaktır, bu nedenle bağlantılar gerçekten "her zaman HEAD'i çok otomatik bir şekilde göstermez" .... ya ben anlamadım ya da bu iddia orijinal yanıttan daha iyi kaldırılmalı (?)
Kavramsal fark:
Git alt modülleri ile büyük bir depoyu daha küçük olanlara ayırmak istersiniz. Bir alt modüle referans vermenin yolu maven tarzındadır - diğer (alt modül) havuzundan tek bir işleme atıfta bulunuyorsunuz. Alt modül içinde bir değişikliğe ihtiyacınız varsa, alt modül içinde bir taahhüt / itme yapmanız gerekir, daha sonra ana depodaki yeni taahhüdüne bakın ve ardından ana deponun değişen referansını taahhüt edin / itin. Bu şekilde, tüm yapı için her iki depoya da erişiminiz olması gerekir.
Git subtree ile geçmişiniz de dahil olmak üzere başka bir havuzu kendinize entegre edersiniz. Bu yüzden, onu entegre ettikten sonra, deponuzun boyutu muhtemelen daha büyüktür (bu nedenle depoları daha küçük tutmak için bir strateji değildir). Entegrasyondan sonra diğer depoya bağlantı yoktur ve güncelleme almak istemiyorsanız bu depoya erişmeniz gerekmez. Yani bu strateji daha çok kod ve tarihin yeniden kullanımı için - ben şahsen kullanmıyorum.
git subtree
hala seninle de - eğer istersen - itebilirsin değil mi?
alt modülü
bir uzaktan kumandaya bir ana repo itme alt modülün dosyaları itmek değil
Ağaç altı
uzaktan iter alt ağacın dosyalarına bir ana repo itme
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master