Git Submodules: Gerenciando DependĂȘncias como SubmĂłdulos
+------------------------+
| Git Submodules |
| |
| Nested Repositories |
| Dependency Management |
| Version Control |
| |
| Project Integration |
+------------------------+
Conceitos Básicos
O que são Submodules?
Estrutura
projeto/
âââ .git/
âââ .gitmodules
âââ lib/
â âââ dependency/
âââ src/
Comandos Essenciais
Operações Básicas
# Adicionar submodule
git submodule add https://github.com/user/repo lib/repo
# Inicializar submodules
git submodule init
# Atualizar submodules
git submodule update --init --recursive
# Remover submodule
git submodule deinit lib/repo
git rm lib/repo
Clonagem
# Clone com submodules
git clone --recursive https://github.com/user/repo
# Ou apĂłs clone normal
git submodule update --init --recursive
Gerenciamento
Atualizando Submodules
Trabalhando com Branches
# Entrar no submodule
cd lib/repo
# Mudar branch
git checkout main
# Atualizar
git pull origin main
# Voltar e commitar
cd ../..
git add lib/repo
git commit -m "atualiza submodule"
Boas Práticas
Recomendações
+------------------------+
| BOAS PRĂTICAS |
| |
| ⹠VersÔes eståveis |
| âą Commits atĂŽmicos |
| ⹠Documentação clara |
| âą Updates planejados |
| âą Testes integrados |
+------------------------+
Configuração
# Configurar push recursivo
git config push.recurseSubmodules on-demand
# Configurar status detalhado
git config status.submoduleSummary true
Troubleshooting
Problemas Comuns
Soluções
# Resolver detached HEAD
cd submodule
git checkout main
cd ..
git add submodule
git commit
# Forçar update
git submodule update --force --recursive
Workflows
Desenvolvimento
CI/CD
# Script de CI
#!/bin/sh
# Inicializar e atualizar submodules
git submodule update --init --recursive
# Build e teste
for module in $(git submodule | awk '{print $2}'); do
cd $module
npm install
npm test
cd ..
done
Alternativas
Comparação
Dicas Avançadas
Performance
# Clone superficial
git clone --depth 1 --shallow-submodules
# Update paralelo
git submodule update --init --recursive --jobs 4
Automação
# Hook pre-push
#!/bin/sh
git submodule foreach git push
# Hook post-merge
#!/bin/sh
git submodule update --recursive
Próximos Passos
Tópicos Relacionados
Dependency Management
22 abril 2025