Exemplo Prático: Merge feature/java17-migration → develop

Este documento mostra exatamente o que fazer, passo a passo, com comandos reais.


📋 Pré-requisitos

Antes de começar, verifique:

# 1. Você está no diretório correto?
cd /opt/ds-ecosif-ia-services

# 2. Você tem permissões para fazer push?
git remote -v

# 3. Todos os branches estão atualizados?
git fetch --all

# 4. Você está em um estado limpo?
git status
# (deve mostrar "working tree clean" ou apenas submódulos modificados)

🚀 Passo a Passo Completo

PASSO 1: Preparar o Branch develop

# 1.1 Mudar para develop
git checkout develop

# 1.2 Atualizar do remote
git pull origin develop

# 1.3 Verificar status
git status

Saída esperada: Working tree clean (ou apenas submódulos modificados)


PASSO 2: Fazer o Merge

# 2.1 Fazer merge do feature/java17-migration
git merge feature/java17-migration --no-ff -m "Merge feature/java17-migration into develop

- Migração para Java 17
- Atualizações de dependências
- Correções de compliance e estrutura
- Melhorias no balanceinquiry"

# 2.2 Se houver conflitos, resolver:
# - Git mostrará arquivos com conflitos
# - Edite os arquivos manualmente
# - Depois: git add . && git commit

# 2.3 Verificar resultado
git log --oneline -5

Saída esperada: Você verá o commit de merge no topo do histórico


PASSO 3: Atualizar Submódulos para develop

Agora os submódulos ainda apontam para commits do feature/java17-migration. Precisamos atualizá-los para apontar para o develop de cada submódulo.

Opção A: Usar o Script (RECOMENDADO)

# 3.1 Executar script de sincronização
./scripts/sync-submodules.sh develop develop

# 3.2 Ver o que mudou
git status

# 3.3 Adicionar todas as atualizações
git add .

# 3.4 Commitar
git commit -m "chore: atualizar submódulos para branch develop

- ecosif-compliance: atualizado para develop
- ecosif-structure: atualizado para develop
- ecosif-angular: atualizado para develop
- [adicione outros conforme necessário]"

Opção B: Manual (se preferir controle total)

# Para cada submódulo, fazer:

# ecosif-compliance
cd ecosif-compliance
git checkout develop
git pull origin develop
cd ..
git add ecosif-compliance
git commit -m "chore: atualizar ecosif-compliance para develop"

# ecosif-structure
cd ecosif-structure
git checkout develop
git pull origin develop
cd ..
git add ecosif-structure
git commit -m "chore: atualizar ecosif-structure para develop"

# ecosif-angular
cd ecosif-angular
git checkout develop
git pull origin develop
cd ..
git add ecosif-angular
git commit -m "chore: atualizar ecosif-angular para develop"

# Repetir para todos os outros submódulos...

PASSO 4: Configurar Submódulos para Seguir Branch develop

Isso faz com que os submódulos sempre sigam o branch develop automaticamente.

# 4.1 Ver submódulos atuais
cat .gitmodules

# 4.2 Configurar cada submódulo
git config -f .gitmodules submodule.ecosif-compliance.branch develop
git config -f .gitmodules submodule.ecosif-structure.branch develop
git config -f .gitmodules submodule.ecosif-angular.branch develop
git config -f .gitmodules submodule.ecosif-auth.branch develop
git config -f .gitmodules submodule.ecosif-masterdata.branch develop
git config -f .gitmodules submodule.ecosif-moviments.branch develop
git config -f .gitmodules submodule.ecosif-querys.branch develop
git config -f .gitmodules submodule.ecosif-reports.branch develop
# Adicione outros conforme necessário

# 4.3 Verificar configuração
cat .gitmodules

# Deve mostrar algo como:
# [submodule "ecosif-compliance"]
#   path = ecosif-compliance
#   url = <url>
#   branch = develop

# 4.4 Commitar a configuração
git add .gitmodules
git commit -m "chore: configurar submódulos para seguir branch develop"

PASSO 5: Verificar Tudo Está Correto

# 5.1 Ver status geral
git status

# 5.2 Ver branch e commit de cada submódulo
git submodule foreach 'echo "$name: $(git branch --show-current) @ $(git rev-parse --short HEAD)"'

# 5.3 Verificar que todos estão em develop
# (todos devem mostrar "develop" como branch)

# 5.4 Ver histórico recente
git log --oneline --graph -10

Saída esperada: Todos os submódulos devem estar no branch develop


PASSO 6: Push para Remote

# 6.1 Push do repositório principal
git push origin develop

# 6.2 Se algum submódulo também precisar de push
# (geralmente não é necessário, mas verifique)
cd ecosif-compliance
git status
# Se mostrar "Your branch is ahead of 'origin/develop'", fazer:
# git push origin develop
cd ..

✅ Verificação Final

Execute estes comandos para confirmar que tudo está correto:

# 1. Verificar branch atual
git branch --show-current
# Deve mostrar: develop

# 2. Verificar status
git status
# Deve mostrar: "working tree clean" ou apenas submódulos não commitados

# 3. Verificar submódulos
git submodule status
# Todos devem mostrar o commit atual do develop

# 4. Verificar branches dos submódulos
git submodule foreach 'git branch --show-current'
# Todos devem mostrar: develop

# 5. Testar atualização automática
git submodule update --remote --dry-run
# Deve mostrar quais submódulos seriam atualizados (se houver)

🔄 Processo Contínuo Após o Merge

Agora que tudo está configurado, o processo diário é:

Quando Desenvolver em um Submódulo

# 1. Trabalhar no submódulo
cd ecosif-compliance
# ... fazer alterações ...
git add .
git commit -m "feat: nova funcionalidade"
git push origin develop
cd ..

# 2. Atualizar referência no repositório principal
git submodule update --remote ecosif-compliance
git add ecosif-compliance
git commit -m "chore: atualizar ecosif-compliance"
git push origin develop

Quando Atualizar Todos os Submódulos

# Atualizar todos de uma vez
git submodule update --remote --recursive
git add .
git commit -m "chore: atualizar todos os submódulos"
git push origin develop

🆘 Troubleshooting

Erro: "fatal: refusing to merge unrelated histories"

# Adicionar flag --allow-unrelated-histories
git merge feature/java17-migration --allow-unrelated-histories --no-ff -m "Merge..."

Erro: Submódulo não muda de branch

cd <submodule>
git fetch origin
git checkout develop
git branch --set-upstream-to=origin/develop develop
cd ..

Erro: "submodule is not on branch develop"

cd <submodule>
git checkout develop
cd ..
git add <submodule>
git commit -m "fix: forçar <submodule> para develop"

📝 Resumo dos Comandos

# Sequência completa (copie e cole)
cd /opt/ds-ecosif-ia-services
git checkout develop
git pull origin develop
git merge feature/java17-migration --no-ff -m "Merge feature/java17-migration into develop"
./scripts/sync-submodules.sh develop develop
git add .
git commit -m "chore: atualizar submódulos para develop"
# Configurar .gitmodules (veja PASSO 4 acima)
git push origin develop

🎯 Resultado Esperado

Após completar todos os passos:

✅ Branch develop do repositório principal contém o merge
✅ Todos os submódulos apontam para o branch develop de cada um
.gitmodules configurado para seguir develop
✅ Tudo commitado e pushado
✅ Pronto para desenvolvimento contínuo