Posso sugerir outra solução (alternativa aos submódulos git ) para o seu problema - ferramenta gil (git links)
Permite descrever e gerenciar dependências complexas de repositórios git.
Também fornece uma solução para o problema de dependência de sub-módulos recursivos do git .
Considere que você possui as seguintes dependências do projeto:
exemplo de gráfico de dependência do repositório git
Em seguida, você pode definir o .gitlinks
arquivo com a descrição da relação dos repositórios:
# 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
Cada linha descreve o link git no seguinte formato:
- Nome exclusivo do repositório
- Caminho relativo do repositório (iniciado a partir do caminho do arquivo .gitlinks)
- Repositório Git que será usado no comando git clone Ramificação do repositório para checkout
- Linha vazia ou a linha iniciada com # não é analisada (tratada como comentário).
Finalmente, você deve atualizar seu repositório de amostras raiz:
# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link
# The same result with a single command
gil update
Como resultado, você clonará todos os projetos necessários e os vinculará de maneira adequada.
Se você deseja confirmar todas as alterações em algum repositório com todas as alterações em repositórios vinculados a filhos, é possível fazê-lo com um único comando:
gil commit -a -m "Some big update"
Os comandos pull, push funcionam de maneira semelhante:
gil pull
gil push
A ferramenta Gil (git links) suporta os seguintes comandos:
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
Mais sobre o problema de dependência dos sub-módulos recursivos git .