🌿 Atividade 15: GitFlow e Trabalho Colaborativo
🎯 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:
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.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.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).hotfix/correcao-critica: Faixa de emergência direta. Criada a partir damainpara corrigir um bug grave que está derrubando a produção de forma imediata.
📊 Visualizando a Topologia GitFlow
📖 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:
- Analise com calma: O conflito exibe a seção superior (
<<<<<<< HEADaté=======) contendo o seu código, e a seção inferior (=======até>>>>>>>) contendo o código de quem já enviou. - Consenso técnico: Converse com seu colega de equipe para entender as necessidades de ambos os códigos.
- 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;
- 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.
- Escreva a sintaxe do Mermaid
gitGraph(baseado no exemplo guiado) representando a evolução do seu projeto. - 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-principalcom pelo menos 2 commits individuais. - O merge da feature de volta para a
develop. - O merge final da
developpara amainselando a versão estávelv1.0.0.
- O commit inicial na branch
🏁 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.
- Simule (em formato texto dentro do seu Markdown) um arquivo do seu projeto que sofreu conflito em equipe.
- Escreva o bloco mostrando as tags de demarcação (
<<<<<<<,=======,>>>>>>>) com os códigos conflitantes. - 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:
- Salve o arquivo contendo os diagramas GitGraph e a simulação de conflito com o nome
Atividade_15.mdna pastaes-atv-15-gitflow-colaboracao/do seu repositório GitHub. - Certifique-se de fazer o commit e push para o repositório público.
- Submeta o link do seu repositório no Microsoft Teams para avaliação do professor.
💡 Checkpoint de Lógica
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. |
🌐 Atividade 14: Modelagem de APIs REST e Swagger
Bem-vindo a mais uma etapa prática de Engenharia de Software! Agora que você conhece as camadas internas do software, aprenderá como expor e conectar o seu sistema ao mundo externo. Hoje, vamos nos tornar arquitetos de comunicação móvel e web, projetando contratos de integração baseados em APIs RESTful, payloads de dados JSON e documentando tudo com o padrão profissional global Swagger (OpenAPI). 🛡️🧩
🚀 Atividade 16: Pipelines de CI/CD com GitHub Actions
Bem-vindo a mais uma etapa da sua jornada na Engenharia de Software! Nas atividades anteriores, aprendemos sobre GitFlow e arquitetura. Hoje, daremos um passo fundamental na automação de processos industriais de software: a Integração Contínua (CI). Aprenderemos como automatizar a compilação e execução de testes JUnit a cada Push que seu time faz para o repositório, garantindo blindagem contra códigos bugados! 🛡️🧩