🛠️ Atividades

🌿 Atividade 15: GitFlow e Trabalho Colaborativo

Bem-vindo a mais uma etapa prática de Engenharia de Software! Até agora, você criou especificações e diagramas. Mas na vida real de desenvolvimento corporativo, as equipes trabalham juntas em uma base de código única. Como fazer para que 10 programadores editem o mesmo arquivo do Spring Boot ao mesmo tempo sem que um apague a alteração do outro? Hoje, aprenderemos a dominar o controle de versão profissional usando o Git e a metodologia estratégica GitFlow. 🛡️🧩

🎯 Objetivo da Aula

Ao final desta atividade, você será capaz de:

  • Trabalhar de forma colaborativa usando repositórios Git/GitHub.
  • Aplicar o padrão de ramificação GitFlow (main, develop, feature/, hotfix/).
  • Criar Pull Requests (PR) e conduzir processos de Code Review.
  • Identificar e resolver de forma segura os clássicos Conflitos de Merge (Merge Conflicts).

🏢 O Cenário Prático (Seu Desafio)

Na TecProExpress, os desenvolvedores Beto e Lucas estavam trabalhando na mesma tela de faturamento. Beto alterou o cálculo do frete adicionando o imposto do ICMS. Lucas, trabalhando no mesmo arquivo na mesma linha de código, mudou a lógica para aceitar Pix. Ao subir o código no final do dia, as alterações se atropelaram, o servidor do Git travou e metade da lógica do Beto sumiu da empresa!

O gerente técnico ficou furioso: "Como vocês não usam branches dedicadas e GitFlow?!".

"Seu desafio como Engenheiro de Configuração (DevOps) é implantar a metodologia GitFlow na TecProExpress. Você desenhará a topologia de branches mostrando a trilha do desenvolvimento de uma nova funcionalidade, como ela passa por revisão técnica e como resolver os conflitos de mesclagem lógicos se dois desenvolvedores tocarem no mesmo arquivo."


🧠 Fundamentos: A Teoria Traduzida

O Git é a ferramenta de controle de versão (como a máquina do tempo do seu código). O GitFlow é o "manual de trânsito" que diz quais faixas lógicas os desenvolvedores devem trafegar.

As Faixas Lógicas (Branches) do GitFlow:

  1. main (antiga master): A faixa rápida de alta segurança. Contém apenas o código que está rodando em produção de forma 100% testada e estável.
  2. develop: A faixa central de integração. Onde o time junta todas as novas funcionalidades que estão sendo desenvolvidas para a próxima versão.
  3. feature/nome-da-tarefa: Faixas locais temporárias. Cada programador cria a sua para trabalhar isoladamente em uma tarefa específica (Ex: feature/login-htmx).
  4. hotfix/correcao-critica: Faixa de emergência direta. Criada a partir da main para corrigir um bug grave que está derrubando a produção de forma imediata.

📊 Visualizando a Topologia GitFlow

Dica:Code Review: Nunca mescle seu código na branch de integração sem que pelo menos um outro colega de equipe faça o "Double Check" no seu Pull Request. Quatro olhos veem muito melhor do que dois!

📖 Exemplo Guiado: Anatomia de um Conflito de Merge

Se dois desenvolvedores editarem a linha 42 do arquivo DeliveryService.java de forma diferente, o Git não saberá qual escolher. Ele gerará um Merge Conflict e marcará o arquivo assim:

<<<<<<< HEAD
    // Lógica do Desenvolvedor Lucas (Branch Local)
    double freteFinal = valorBase * 1.10;
=======
    // Lógica do Desenvolvedor Beto (Branch Remota)
    double freteFinal = (valorBase + impostoIcms) * 1.05;
>>>>>>> feature/calculo-beto

🛠️ Como resolver o conflito passo a passo:

  1. Analise com calma: O conflito exibe a seção superior (<<<<<<< HEAD até =======) contendo o seu código, e a seção inferior (======= até >>>>>>>) contendo o código de quem já enviou.
  2. Consenso técnico: Converse com seu colega de equipe para entender as necessidades de ambos os códigos.
  3. Edição Limpa: Apague as marcações vermelhas do Git (<<<<<<<, =======, >>>>>>>) e mescle as duas lógicas na melhor solução possível:
    // Lógica Consolidada em Equipe
    double freteFinal = (valorBase + impostoIcms) * 1.10;
  1. Commit de Resolução: Salve o arquivo editado e faça o commit de sucesso (git commit -am "Resolvendo conflito de cálculo de frete").

🛠️ Prática Obrigatória 1: A Linha do Tempo GitFlow

Cenário: O fluxo de versionamento do seu projeto semestral.

  1. Escreva a sintaxe do Mermaid gitGraph (baseado no exemplo guiado) representando a evolução do seu projeto.
  2. O seu gráfico deve apresentar:
    • O commit inicial na branch main.
    • A criação e checkout da branch develop.
    • A criação de uma branch de feature/sua-funcionalidade-principal com pelo menos 2 commits individuais.
    • O merge da feature de volta para a develop.
    • O merge final da develop para a main selando a versão estável v1.0.0.

🏁 Resultado Esperado (Para sua Referência)

O diagrama interativo gitGraph renderizado no corpo do seu arquivo de entrega na documentação do mdBook.


🛠️ Prática Obrigatória 2: Manual de Resolução de Conflitos

Cenário: Proteção contra perda de arquivos.

  1. Simule (em formato texto dentro do seu Markdown) um arquivo do seu projeto que sofreu conflito em equipe.
  2. Escreva o bloco mostrando as tags de demarcação (<<<<<<<, =======, >>>>>>>) com os códigos conflitantes.
  3. Escreva logo abaixo o arquivo final resolvido e justifique a escolha técnica da mesclagem.

📤 Instruções de Entrega (Microsoft Teams)

Após validar suas especificações de versionamento técnico:

  1. Salve o arquivo contendo os diagramas GitGraph e a simulação de conflito com o nome Atividade_15.md na pasta es-atv-15-gitflow-colaboracao/ do seu repositório GitHub.
  2. Certifique-se de fazer o commit e push para o repositório público.
  3. Submeta o link do seu repositório no Microsoft Teams para avaliação do professor.

💡 Checkpoint de Lógica

Importante:Reflexão Profissional: Por que a metodologia GitFlow proíbe terminantemente que os desenvolvedores façam commits diretos e pushes na branch main de produção? (Resposta: Para garantir estabilidade e governança do produto. A branch main representa o software rodando nos clientes; se pushes diretos fossem permitidos, qualquer erro de digitação local que quebrasse a compilação seria publicado imediatamente, parando as operações de faturamento ou de logística da empresa). 🧠🛡️

📊 Rubrica Formativa de Avaliação

Critério de Avaliação Insuficiente (0% - 40%) Regular (41% - 70%) Excelente (71% - 100%)
Fluxo GitFlow & Diagrama Mermaid gitGraph Erros na sintaxe do Mermaid ou ramificação direta sem branch `develop`. Desenha o GitGraph mas sem mostrar o ciclo de vida completo de uma branch `feature`. Diagrama Mermaid `gitGraph` impecável mapeando commits na `main`, criação da `develop`, ramificação de `feature` e tag de release.
Resolução de Conflitos (Merge Conflict) Não entende as marcações do Git (`<<<<<<<`, `=======`, `>>>>>>>`). Simula o conflito mas resolve de forma destrutiva apagando lógicas válidas. Simulação técnica perfeita de conflito de código com resolução consensual limpa e justificativa.
Entrega no GitHub Entrega fora da pasta `es-atv-15-gitflow-colaboracao/`. Arquivo entregue sem os blocos de código formatados. Submete `Atividade_15.md` com GitGraph funcional e documentação limpa no repositório.
Copyright © 2026