🚀 Capítulo 05: Controle de Versão Avançado (Git Flow) (Tema: Multiverso da Marvel)
NOTE
Este capítulo utiliza a temática do Multiverso da Marvel para explicar o Git Flow. Gerenciar múltiplas linhas do tempo paralelas exige regras rígidas para não criar uma guerra multiversal!
1. 🎯 Objetivo da Aula
Compreender o modelo de ramificação Git Flow e aprender a gerenciar múltiplas linhas do tempo (branches) de desenvolvimento de forma organizada e profissional.
2. 🏢 O Cenário Prático (Seu Desafio)
No Multiverso da Marvel, existem várias linhas do tempo paralelas acontecendo ao mesmo tempo.
- A Linha do Tempo Sagrada (Terra-616) é a principal. Nada pode dar errado nela.
- Se alguém voltar no tempo ou fizer uma escolha diferente, cria-se uma Linha do Tempo Alternativa (Nexus).
- Se essas linhas se chocarem sem controle, acontece uma Incursão e os universos se destroem!
No desenvolvimento de software com Git, nós usamos Branches (Ramos) para criar essas linhas do tempo paralelas para o nosso código. Se todo mundo mexer no mesmo arquivo ao mesmo tempo na linha principal, o código explode! O Git Flow é o manual de regras da AVT (Autoridade de Variância Temporal) para organizar o multiverso do código! Seu desafio é manter o multiverso em ordem!
3. 🧠 Fundamentos: A Teoria Traduzida
O Git Flow é um modelo de organização de branches criado por Vincent Driessen. Ele define quais branches criar e quando fazer a fusão (merge) entre elas.
⏳ As Linhas do Tempo do Git Flow:
main(A Linha do Tempo Sagrada):- Contém o código que está rodando agora em produção (o site que o cliente usa). Só mexemos nela para colocar versões finalizadas.
develop(A Base de Treinamento):- Onde os programadores juntam seus códigos novos para testar. É a linha do tempo do futuro próximo.
feature/(Linhas Alternativas de Criação):- Criadas a partir da
developpara criar uma função nova (Ex:feature/tela-login). Quando termina, ela volta para adevelop.
- Criadas a partir da
hotfix/(Linhas de Emergência):- Criadas a partir da
mainpara corrigir um bug urgente que está acontecendo agora no site real. Corrige e volta direto para amain.
- Criadas a partir da
4. 📖 Exemplo Guiado: O Fluxo das Linhas do Tempo
Imagine o caminho que o seu código faz:
- Você está na
develop. - Você cria a
feature/perfil-usuariopara trabalhar nela. - Você termina o trabalho e junta (merge) de volta na
develop. - A equipe testa a
develope vê que está tudo perfeito. - A equipe junta a
developnamaine lança a versão 1.0!
5. 🛠️ Prática Obrigatória 1: Qual Branch Usar?
Diga qual tipo de branch do Git Flow (feature, hotfix ou main) você deve criar em cada situação:
- O botão de “Comprar” do site de produção parou de funcionar e os clientes não conseguem pagar.
- O chefe pediu para você começar a desenhar a nova tela de “Histórico de Compras” que será lançada no mês que vem.
- O código que já foi testado e aprovado em homologação vai ser colocado no ar hoje para os clientes usarem.
6. 🛠️ Prática Obrigatória 2: O Conflito de Linhas do Tempo
O que acontece no Git quando dois programadores alteram a mesma linha do mesmo arquivo em branches diferentes e tentam juntar (merge) na develop ao mesmo tempo? Como chamamos esse evento e quem deve resolver?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 05 DevOps) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_13_devops_e_cloud/
├── capitulos/
│ ├── capitulo_05_gitflow.md
│ └── codigos/
│ └── cap05/
│ └── comando_branches.txt💡 Checkpoint de Lógica
O Git Flow é excelente para projetos grandes e com lançamentos agendados. Mas para projetos que atualizam o site dezenas de vezes por dia (Continuous Deployment), ele pode ser muito lento. Nesses casos, usamos modelos mais simples como o GitHub Flow!
10. 🔥 Desafio de Fixação
Pesquise sobre a diferença entre o Git Flow e o GitHub Flow (este último usa apenas a main e branches de feature).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
hotfix/(Correção urgente em produção).feature/(Nova funcionalidade para o futuro).main(Código que vai para produção). Gabarito da Prática 2: Acontece um Merge Conflict (Conflito de Fusão). O Git não sabe qual das duas alterações escolher e avisa os programadores. Um dos programadores (ou os dois juntos) deve abrir o arquivo, decidir qual código fica e salvar a versão final manualmente.