Guia Completo de Git e GitHub¶
Este guia oferece um passo a passo detalhado sobre como utilizar Git e GitHub de forma colaborativa. O material aborda desde a configuração inicial até fluxos de trabalho avançados, explicando os conceitos, os comandos essenciais e o "porquê" de cada processo para garantir a eficiência da equipe.
1. Conceitos Fundamentais: Git vs. GitHub¶
É crucial entender a diferença entre as ferramentas:
-
Git: É o sistema de controle de versão distribuído instalado em sua máquina. Ele é responsável por rastrear todas as alterações nos arquivos do projeto, criando um histórico detalhado.
-
GitHub: É a plataforma online que hospeda repositórios Git. Ele funciona como o servidor central onde a equipe sincroniza seu trabalho.
Basicamente, o fluxo de trabalho consiste em manter seu repositório local (em sua máquina) sincronizado com o repositório remoto (no GitHub).
2. Configuração Inicial do Projeto¶
Existem duas maneiras de começar um projeto: criando um novo ou clonando um existente.
Criando e Conectando um Novo Repositório¶
Este processo é ideal para projetos que estão começando do zero.
Instruções (Linux e Windows):
-
Crie um repositório remoto no GitHub.
-
Na pasta do seu projeto em sua máquina, abra o terminal (Terminal/Bash no Linux, PowerShell/CMD/Git Bash no Windows).
-
Inicie um repositório Git local:
Este comando inicia um repositório local.git init -
Renomeie a branch principal para
main(uma prática moderna):Este comando cria a "gaveta principal" do projeto.git branch -M main -
Conecte seu repositório local ao repositório remoto que você criou no GitHub:
Este passo conecta os dois repositórios.git remote add origin [URL_DO_SEU_REPOSITORIO.GIT]
Clonando um Repositório Existente¶
Para trabalhar em um projeto que já está no GitHub, o primeiro passo é "clonar" o repositório. Isso cria uma cópia local completa do projeto em sua máquina.
Instruções (Linux e Windows):
git clone [URL_DO_REPOSITORIO]
3. O Fluxo de Trabalho Essencial: Salvando e Sincronizando¶
O ciclo diário de trabalho envolve salvar suas alterações (commits) e sincronizá-las com a equipe.
Passo 1: Verificar o Status das Alterações¶
Verifique quais arquivos foram modificados. Arquivos que não estão no repositório ou não foram atualizados aparecerão marcados.
Comando (Linux e Windows):
git status
Passo 2: Adicionar Alterações à Área de Preparação¶
Para incluir as alterações no próximo commit, você precisa adicioná-las à "área de preparação" (Staging Area).
Comando (Linux e Windows):
git add .
Passo 3: "Comitar" as Alterações¶
O commit salva um "pacote" de alterações no histórico do repositório local. É fundamental que a mensagem do commit resuma o que foi feito.
Comando (Linux e Windows):
git commit -m "Sua mensagem descritiva aqui"
git log.
Passo 4: Sincronizar com o Repositório Remoto¶
-
Baixar alterações (Pull): Antes de enviar suas mudanças, sempre baixe as atualizações feitas por outros membros da equipe para evitar conflitos.
Comando (Linux e Windows):
Este comando atualiza seu repositório local com as mudanças que estão no repositório remoto.git pull origin main -
Enviar alterações (Push): Após fazer seus commits, envie suas contribuições para o GitHub.
Comando (Linux e Windows):
Isso envia todas as alterações confirmadas do seu repositório local para o remoto.git push origin main
4. Trabalhando com Branches (Ramificações)¶
Branches são como cópias independentes do projeto, permitindo desenvolver funcionalidades ou testar ideias de forma isolada. O código só é integrado à branch principal (main) depois de aprovado.
Por que usar várias branches?
- Isolamento e Segurança: Permite que desenvolvedores trabalhem em tarefas diferentes simultaneamente sem afetar a versão estável do código.
- Organização: Facilita o gerenciamento de funcionalidades, correções e diferentes versões do software.
Comandos de Branch (Linux e Windows)¶
-
Listar branches:
Este comando mostra todas as ramificações existentes no repositório.git branch -
Criar uma nova branch e já mudar para ela:
O comandogit checkout -b nome-da-nova-branchcheckoutaltera para a nova branch, e a flag-ba cria. -
Mudar para uma branch existente:
Este comando apenas muda para a branch especificada.git checkout nome-da-branch -
Excluir uma branch:
-
Localmente:
git branch -d nome-da-branch -
Remotamente:
git push origin --delete nome-da-branch
-
Merge: Integrando Branches¶
Merge é o processo de integrar as alterações de uma branch em outra.
Como fazer um merge:
-
Primeiro, vá para a branch que vai receber as alterações (ex:
mainoudevelop).git checkout main -
Execute o comando
merge, especificando qual branch você quer integrar:git merge nome-da-branch-a-ser-integrada
5. Padrões de Branches: GitFlow¶
GitFlow é um modelo popular que organiza o fluxo de trabalho em projetos maiores.
Branches Principais:¶
-
main: Contém o código estável, pronto para produção. -
develop: Serve como base para a criação de outras branches e integra todas as novas funcionalidades.
Branches de Suporte:¶
-
feature: Criadas a partir dadeveloppara implementar novas funcionalidades. -
release: Usadas para testar o código dadevelopantes de mesclá-lo com amainpara um novo lançamento. -
hotfix: Criadas a partir damainpara corrigir problemas críticos em produção de forma rápida. As correções são aplicadas tanto namainquanto nadevelop.
6. Tags para Versionamento de Software¶
Tags são marcadores usados para identificar pontos específicos no histórico, geralmente para marcar lançamentos de versões (v1.0, v1.1, v2.0).
Por que é importante? Facilita a visualização e o acesso ao código exato de cada versão lançada, o que é fundamental para manutenção e organização.
Comando (Linux e Windows):
git tag -a v1.0 -m "Lançamento da versão 1.0"
-a definimos a versão e com -m, a mensagem da tag.
7. Colaboração Eficiente¶
Pull Requests (PRs)¶
Um Pull Request (PR) é um mecanismo do GitHub para propor e analisar um merge antes que ele aconteça. É uma prática essencial para o trabalho em equipe, pois permite testar e analisar o código antes da integração.
Por que usar Pull Requests?
- Revisão de Código: Permite que a equipe analise o código, sugira melhorias e garanta a qualidade antes da integração.
- Discussão e Rastreabilidade: Cria um registro formal das alterações e das decisões tomadas.
- Testes: Permite a execução de testes automatizados para garantir que as novas mudanças não quebrem o sistema.
O processo envolve abrir um PR, onde as alterações são apontadas, a equipe revisa, e por fim, a branch é mesclada (merge).
Issues¶
Issues no GitHub são usadas para organizar o projeto, funcionando como um checklist de tarefas. Elas permitem rastrear bugs, documentação, novas funcionalidades e outras demandas, ajudando a equipe a se manter alinhada. É possível usar tags (labels) para organizar cada issue.
8. Boas Práticas Adicionais¶
O Arquivo .gitignore¶
O que é? Um arquivo de texto chamado
.gitignoreque você coloca na raiz do seu projeto.Por que é importante? Nele, você lista arquivos e pastas que o Git deve ignorar completamente. Isso é crucial para evitar que arquivos desnecessários ou sensíveis sejam enviados para o repositório, como:
- Pastas de dependências (ex:
node_modules).- Arquivos de configuração do sistema operacional (ex:
.DS_Storeno macOS).- Arquivos com senhas ou chaves de API (ex:
.env).- Arquivos compilados ou gerados automaticamente.
Padrão para Mensagens de Commit (Conventional Commits)¶
O que é? É uma convenção simples sobre como escrever as mensagens de commit para torná-las mais claras e padronizadas.
Por que é importante? Torna o histórico do projeto muito mais legível e permite a automação de processos. Um formato comum é:
feat: Adiciona modal de login (para novas funcionalidades).fix: Corrige validação de e-mail no formulário (para correção de bugs).docs: Atualiza documentação do componente de botão (para mudanças na documentação).
9. Resolvendo Conflitos¶
Um conflito ocorre quando o Git não consegue mesclar duas alterações porque elas foram feitas na mesma parte do mesmo arquivo.
Como resolver:
-
Primeiro, execute
git pull origin mainpara trazer as alterações remotas e revelar o conflito em sua máquina local. -
Abra os arquivos conflitantes. O Git marcará as áreas problemáticas com
<<<<<<< HEAD,=======e>>>>>>>. -
Edite manualmente o arquivo para manter a versão final correta, removendo as marcações do Git. Você pode manter a versão local, a remota ou uma combinação de ambas.
-
Após resolver, adicione os arquivos corrigidos com
git add .. -
Faça o commit da resolução. Geralmente, não é preciso escrever uma mensagem, pois o Git cria uma automaticamente.
git commit
10. Fluxo de Trabalho do Desenvolvedor (Passo a Passo)¶
Aqui está um resumo prático do fluxo de trabalho para iniciar e concluir uma nova tarefa:
-
Sincronize seu ambiente: Antes de começar, garanta que sua branch principal local está atualizada.
git checkout main git pull origin main -
Crie uma branch para a tarefa: Crie uma nova branch a partir da
main(oudevelop).git checkout -b feature/nome-da-sua-tarefa -
Desenvolva e faça commits: Trabalhe no seu código e faça commits pequenos e frequentes com mensagens claras.
# ... faz alterações no código ... git add . git commit -m "feat: implementa a lógica inicial do componente X" -
Envie sua branch para o GitHub: Ao finalizar a tarefa (ou ao final do dia), envie seu trabalho.
git push origin feature/nome-da-sua-tarefa -
Abra um Pull Request: No GitHub, crie um Pull Request da sua branch para a branch principal (
mainoudevelop). -
Revise e faça o Merge: Aguarde a revisão do time. Após a aprovação, o Pull Request será mesclado.
-
Limpeza: Após o merge, você pode excluir sua branch de tarefa localmente.
git checkout main git branch -d feature/nome-da-sua-tarefa