Mogę zaproponować inne rozwiązanie (alternatywa dla git-submodules ) dla twojego problemu - narzędzie gil (git links)
Pozwala opisywać i zarządzać złożonymi zależnościami repozytoriów git.
Zapewnia również rozwiązanie problemu zależności rekurencyjnych podmodułów git .
Rozważ, że masz następujące zależności projektu:
przykładowy wykres zależności repozytorium git
Następnie możesz zdefiniować .gitlinks
plik z opisem relacji z repozytoriami:
# 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
Każda linia opisuje link do git w następującym formacie:
- Unikalna nazwa repozytorium
- Ścieżka względna repozytorium (rozpoczęta od ścieżki pliku .gitlinks)
- Repozytorium Git, które będzie używane w komendzie git clone Repozytorium oddziału do kasy
- Pusta linia lub linia rozpoczynająca się od # nie są analizowane (traktowane jako komentarz).
Wreszcie musisz zaktualizować swoje główne repozytorium przykładowe:
# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link
# The same result with a single command
gil update
W rezultacie sklonujesz wszystkie wymagane projekty i połączysz je ze sobą w odpowiedni sposób.
Jeśli chcesz zatwierdzić wszystkie zmiany w niektórych repozytoriach ze wszystkimi zmianami w podrzędnych repozytoriach połączonych, możesz to zrobić za pomocą jednego polecenia:
gil commit -a -m "Some big update"
Polecenia pull, push działają w podobny sposób:
gil pull
gil push
Narzędzie Gil (git links) obsługuje następujące polecenia:
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
Więcej informacji na temat problemu zależności rekurencyjnych submodułów git .