Git: introdução
Esta aula apresenta o Git, sistema de controle de versão essencial para DevOps, cobrindo conceitos fundamentais como repositório, commits e o fluxo básico de trabalho. O aluno aprenderá a iniciar um repositório, fazer alterações e registrar versões do código.
Nesta aula, vamos mergulhar no Git, a ferramenta de controle de versão mais utilizada no mundo DevOps. O Git permite que equipes trabalhem simultaneamente em um projeto, mantendo um histórico completo de todas as alterações e facilitando a colaboração. Você aprenderá os conceitos essenciais e como executar o fluxo básico do Git no terminal.
Controle de versão é a prática de rastrear e gerenciar alterações no código-fonte. Com o Git, cada alteração é registrada, permitindo voltar a versões anteriores, comparar mudanças e colaborar sem conflitos. É uma habilidade fundamental para qualquer profissional de DevOps.
Por que controle de versão
Sem controle de versão, gerenciar alterações em um projeto de software é caótico. Imagine salvar arquivos com nomes como "projeto-final-v2-corrigido.py" e perder o que foi alterado. O controle de versão resolve isso ao manter um histórico completo e organizado de todas as modificações.
Os principais benefícios incluem:
- Histórico completo: cada alteração é registrada com autor, data e mensagem explicativa.
- Colaboração: várias pessoas podem trabalhar no mesmo projeto sem sobrescrever o trabalho umas das outras.
- Rastreabilidade: é possível identificar quando e por que uma mudança foi feita, essencial para auditoria e debugging.
- Branching e merging: permite desenvolver funcionalidades em paralelo e integrá-las de forma controlada.
- Backup e recuperação: o repositório remoto serve como backup, e é fácil reverter para estados anteriores.
No contexto DevOps, o controle de versão é a base para pipelines de CI/CD, automação de deploys e garantia de que o código em produção seja rastreável.
Repositório
Um repositório Git é um diretório que contém todos os arquivos do projeto e o histórico de versões. Ele é armazenado em uma pasta oculta .git dentro do diretório do projeto. Existem dois tipos de repositórios: local (no seu computador) e remoto (em servidores como GitHub, GitLab ou Bitbucket).
Para iniciar um repositório local, use o comando git init. Isso cria a estrutura necessária para o Git começar a rastrear alterações. Exemplo:
cd meu-projeto
git init
Após a inicialização, você pode verificar o status do repositório com git status. Arquivos podem estar em três estados principais: modificado (modified), preparado (staged) ou consolidado (committed). O repositório remoto é sincronizado com o local através de comandos como git push e git pull.
Commits
Um commit é um snapshot do projeto em um determinado momento. Cada commit possui um hash único (SHA-1) que o identifica, além de autor, data e uma mensagem descritiva. Commits formam a linha do tempo do projeto.
Para fazer um commit, primeiro você precisa adicionar as alterações à área de preparação (staging area) com git add. Depois, cria o commit com git commit -m "mensagem". Exemplo:
git add arquivo.txt
git commit -m "Adiciona funcionalidade X"
Boas práticas para mensagens de commit: use o imperativo, seja claro e conciso, e referencie issues ou tarefas quando possível. Por exemplo: "Corrige bug no login" ou "Implementa endpoint de usuários".
Fluxo básico
O fluxo de trabalho básico do Git consiste em três etapas principais: modificar arquivos, preparar as alterações e consolidá-las em um commit. Esse ciclo se repete à medida que o projeto evolui.
Passo a passo:
- Modifique arquivos no diretório de trabalho (working directory).
- Use
git add <arquivo>para mover as alterações para a área de preparação (staging area). - Use
git commit -m "mensagem"para criar um commit com as alterações preparadas. - Repita os passos 1-3 conforme necessário.
Exemplo completo:
# Inicializar repositório
git init
# Criar um arquivo
echo "Hello, Git!" > arquivo.txt
# Verificar status
git status
# Adicionar à staging
git add arquivo.txt
# Commitar
git commit -m "Primeiro commit: adiciona arquivo.txt"
Após os commits locais, você pode enviá-los para um repositório remoto com git push e baixar alterações com git pull. Esse fluxo é a base para colaboração em equipe.
Boas práticas
- Commits pequenos e atômicos: cada commit deve representar uma única alteração lógica.
- Mensagens descritivas: facilita o entendimento do histórico.
- Não commitar arquivos desnecessários: use
.gitignorepara ignorar binários, dependências, etc. - Commits frequentes: evite acumular muitas alterações antes de commitar.
Referências
- Documentação oficial do Git
- Pro Git Book (português)
- GitHub Docs: Sobre o Git
- Tutoriais Git da Atlassian
- GitHub Training
Exercícios
- Inicialize um repositório Git em um diretório vazio chamado
meu-projeto. Verifique o status. - Crie um arquivo
README.mdcom o texto "# Meu Projeto" e adicione-o à área de preparação. Faça um commit com a mensagem "Adiciona README inicial". - Modifique o
README.mdadicionando uma linha "Este é um projeto de exemplo." Verifique o status e veja a diferença comgit diff. Depois, prepare e commite a alteração. - Crie um arquivo
.gitignoreque ignore todos os arquivos com extensão.log. Crie um arquivodebug.loge verifique se ele é ignorado pelo Git. - Veja o histórico de commits com
git loge identifique o hash do primeiro commit. Usegit show <hash>para ver os detalhes.
mkdir meu-projeto
cd meu-projeto
git init
git status
echo "# Meu Projeto" > README.md
git add README.md
git commit -m "Adiciona README inicial"
echo "Este é um projeto de exemplo." >> README.md
git status
git diff
git add README.md
git commit -m "Adiciona descrição ao README"
echo "*.log" > .gitignore
touch debug.log
git status # debug.log não aparece
git log # copie o hash do primeiro commit (ex: a1b2c3d...)
git show a1b2c3d