Sorununuz için başka bir çözüm önerebilirim ( git-submodules'e alternatif ) - gil (git links) aracı
Karmaşık git depo bağımlılıklarının tanımlanmasını ve yönetilmesini sağlar.
Ayrıca git özyinelemeli alt modüllere bağımlılık sorununa bir çözüm sağlar .
Aşağıdaki proje bağımlılıklarına sahip olduğunuzu düşünün:
sample git repository bağımlılık grafiği
Daha sonra .gitlinks
, depolarla ilişki açıklaması içeren bir dosya tanımlayabilirsiniz:
# Projects
CppBenchmark CppBenchmark https://github.com/chronoxor/CppBenchmark.git master
CppCommon CppCommon https://github.com/chronoxor/CppCommon.git master
CppLogging CppLogging https://github.com/chronoxor/CppLogging.git master
# Modules
Catch2 modules/Catch2 https://github.com/catchorg/Catch2.git master
cpp-optparse modules/cpp-optparse https://github.com/weisslj/cpp-optparse.git master
fmt modules/fmt https://github.com/fmtlib/fmt.git master
HdrHistogram modules/HdrHistogram https://github.com/HdrHistogram/HdrHistogram_c.git master
zlib modules/zlib https://github.com/madler/zlib.git master
# Scripts
build scripts/build https://github.com/chronoxor/CppBuildScripts.git master
cmake scripts/cmake https://github.com/chronoxor/CppCMakeScripts.git master
Her satır git bağlantısını aşağıdaki biçimde tanımlar:
- Deponun benzersiz adı
- Deponun göreli yolu (.gitlinks dosyasının yolundan başlar)
- Git klon komutunda kullanılacak Git deposu Ödeme için depo dalı
- Boş satır veya # ile başlayan satır ayrıştırılmaz (yorum olarak değerlendirilir).
Son olarak kök örnek deponuzu güncellemeniz gerekir:
# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link
# The same result with a single command
gil update
Sonuç olarak, gerekli tüm projeleri klonlayacak ve bunları uygun bir şekilde birbirine bağlayacaksınız.
Bazı depodaki tüm değişiklikleri, alt bağlantılı depolardaki tüm değişikliklerle işlemek istiyorsanız, bunu tek bir komutla yapabilirsiniz:
gil commit -a -m "Some big update"
Çekme, itme komutları benzer şekilde çalışır:
gil pull
gil push
Gil (git links) aracı aşağıdaki komutları destekler:
usage: gil command arguments
Supported commands:
help - show this help
context - command will show the current git link context of the current directory
clone - clone all repositories that are missed in the current context
link - link all repositories that are missed in the current context
update - clone and link in a single operation
pull - pull all repositories in the current directory
push - push all repositories in the current directory
commit - commit all repositories in the current directory
Git özyinelemeli alt modüller bağımlılık sorunu hakkında daha fazla bilgi .