Formação BackEnd

Git, GitHub e GitLab

Módulo 2: Controle de Versão e Colaboração

Prof. Tiago Segato

Logo Bolsa Futuro Digital

Visão Geral do Módulo

Bem-vindo ao Módulo 2! Neste módulo, você aprenderá sobre o essencial do controle de versão com Git e como colaborar usando plataformas como GitHub e GitLab.

O que você vai aprender:

  • A importância do controle de versão no desenvolvimento de software.
  • Os comandos fundamentais do Git para gerenciar seus projetos.
  • Como usar ferramentas visuais para interagir com o Git.
  • O que é GitHub e como utilizá-lo para hospedar seus repositórios e colaborar.
  • Como trabalhar em equipe usando branches e pull requests.
  • Uma introdução ao GitLab e seus diferenciais.
"O controle de versão é como uma máquina do tempo para o seu código, permitindo que você navegue pelo histórico e colabore sem medo."

O que é Controle de Versão?

Controle de Versão (Version Control System - VCS) é um sistema que registra alterações em um arquivo ou conjunto de arquivos ao longo do tempo, para que você possa recuperar versões específicas posteriormente.

Problemas que o Controle de Versão Resolve:

  • Manter histórico de alterações: Quem mudou o quê e quando?
  • Reverter para versões anteriores: Desfazer erros ou experimentos.
  • Trabalho em equipe: Permitir que múltiplos desenvolvedores trabalhem no mesmo projeto simultaneamente sem sobrescrever o trabalho um do outro.
  • Ramificações (Branching): Desenvolver novas funcionalidades isoladamente sem afetar a versão principal do código.
  • Mesclagem (Merging): Combinar alterações de diferentes branches.

Tipos de VCS:

  • Centralizado (CVCS): Possui um único servidor central que contém todos os arquivos versionados (Ex: Subversion, CVS).
  • Distribuído (DVCS): Cada desenvolvedor tem uma cópia completa do repositório, incluindo todo o histórico (Ex: Git, Mercurial). O Git é o DVCS mais popular atualmente.

Introdução ao Git

Git é um sistema de controle de versão distribuído, gratuito e de código aberto, projetado para lidar com tudo, desde projetos pequenos até muito grandes, com velocidade e eficiência.

História:

Criado por Linus Torvalds em 2005 para o desenvolvimento do kernel do Linux, após a comunidade Linux perder o acesso ao BitKeeper (um DVCS proprietário).

Características Principais:

  • Distribuído: Cada desenvolvedor tem um clone completo do repositório.
  • Rápido: A maioria das operações são locais, tornando-o muito rápido.
  • Integridade de Dados: Garante que o histórico não seja corrompido, usando checksums (SHA-1).
  • Ramificação e Mesclagem Poderosas: Facilita o desenvolvimento paralelo e a integração de funcionalidades.
  • Staging Area (Índice): Uma área intermediária que permite formatar commits com precisão.

O Git se tornou o padrão de fato para controle de versão na indústria de software.

Configuração Inicial do Git

Antes de começar a usar o Git, é importante configurá-lo com suas informações pessoais.

Instalação:

Visite git-scm.com/downloads para baixar e instalar o Git para o seu sistema operacional (Windows, macOS, Linux).

Configurações Globais:

Essas configurações são usadas para identificar quem fez cada commit. Abra seu terminal ou prompt de comando:

# Configurar seu nome de usuário git config --global user.name "Seu Nome" # Configurar seu endereço de e-mail git config --global user.email "seu.email@exemplo.com"

Verificando suas Configurações:

# Listar todas as configurações globais git config --global --list # Verificar uma configuração específica git config user.name

Você também pode configurar seu editor de texto padrão, ferramenta de diff, entre outras opções.

Comandos Básicos - Parte 1

Vamos começar com os comandos essenciais para iniciar um repositório e salvar suas alterações.

git init

Inicializa um novo repositório Git em um diretório existente ou cria um novo diretório vazio e o inicializa.

# Navegue até a pasta do seu projeto cd meu-projeto # Inicialize o repositório Git git init

Isso cria um subdiretório oculto chamado .git que contém todos os arquivos necessários para o repositório.

git status

Mostra o estado dos arquivos no diretório de trabalho e na staging area (arquivos modificados, adicionados, etc.).

git status

git add <arquivo> ou git add .

Adiciona alterações do diretório de trabalho para a staging area, preparando-as para o próximo commit. Use . para adicionar todos os arquivos modificados e novos.

# Adicionar um arquivo específico git add README.md # Adicionar todos os arquivos modificados e novos no diretório atual git add .

git commit -m "mensagem descritiva"

Salva as alterações da staging area permanentemente no histórico do repositório com uma mensagem que descreve as mudanças.

git commit -m "Adiciona arquivo README inicial"

Comandos Básicos - Parte 2

Continuando com comandos para visualizar o histórico e gerenciar alterações.

git log

Mostra o histórico de commits do repositório, do mais recente ao mais antigo. Cada commit tem um hash SHA-1 único.

git log # Opções úteis: # git log --oneline (mostra commits em uma linha) # git log --graph (mostra o histórico como um grafo) # git log --stat (mostra estatísticas das alterações)

git diff

Mostra as diferenças entre o diretório de trabalho e a staging area, ou entre a staging area e o último commit, ou entre dois commits.

# Diferenças não adicionadas à staging area git diff # Diferenças adicionadas à staging area (prontas para commit) git diff --staged # Diferenças entre dois commits (usando hashes) git diff

git restore <arquivo>

Descarta alterações no diretório de trabalho, restaurando o arquivo para a versão do último commit (ou da staging area se --staged for usado).

# Descartar alterações em um arquivo no diretório de trabalho git restore nome_do_arquivo.txt # Remover um arquivo da staging area (unstage) git restore --staged nome_do_arquivo.txt

Cuidado: git reset é um comando mais poderoso e complexo para desfazer commits, use com cautela.

Trabalhando com Repositórios Remotos

Repositórios remotos são versões do seu projeto hospedadas na internet ou em uma rede (Ex: GitHub, GitLab).

git remote add <nome> <url>

Adiciona um novo repositório remoto. O nome comum para o principal remoto é origin.

git remote add origin https://github.com/seu-usuario/seu-repositorio.git

git clone <url>

Cria uma cópia local de um repositório remoto existente.

git clone https://github.com/usuario/repositorio-existente.git

git pull <remoto> <branch>

Busca alterações do repositório remoto e as mescla na sua branch local atual. (Equivalente a git fetch seguido de git merge).

git pull origin main

git push <remoto> <branch>

Envia seus commits locais para o repositório remoto.

git push origin main

Ferramentas Visuais para Git

Embora a linha de comando seja poderosa, ferramentas visuais (GUIs) podem facilitar a visualização do histórico e a execução de operações Git.

Exemplos Populares:

  • GitKraken: Interface gráfica multiplataforma, rica em recursos, com visualização de branches e histórico.
  • GitHub Desktop: Ferramenta oficial do GitHub, simplifica o fluxo de trabalho com repositórios do GitHub.
  • Sourcetree: GUI gratuita para Git e Mercurial, disponível para Windows e macOS.
  • Integração com IDEs: Muitos editores de código, como VS Code, WebStorm e IntelliJ IDEA, possuem excelente integração com Git, permitindo realizar operações diretamente da interface do editor.

Vantagens das Ferramentas Visuais:

  • Visualização clara do histórico de commits e branches.
  • Facilidade para realizar staging de partes de arquivos (hunks).
  • Resolução de conflitos de merge de forma mais intuitiva para alguns usuários.
  • Menor curva de aprendizado para iniciantes.

Experimente diferentes ferramentas para encontrar a que melhor se adapta ao seu fluxo de trabalho.

Introdução ao GitHub

GitHub é uma plataforma de hospedagem de código-fonte e arquivos com controle de versão usando Git. É muito mais do que apenas um lugar para armazenar código; é uma plataforma de colaboração.

Principais Funcionalidades:

  • Hospedagem de repositórios Git (públicos e privados).
  • Ferramentas de colaboração: Issues, Pull Requests, Code Reviews.
  • Gerenciamento de projetos: Projects (Kanban boards).
  • Automação: GitHub Actions (CI/CD).
  • Hospedagem de sites estáticos: GitHub Pages.
  • Comunidade: Milhões de desenvolvedores e projetos open source.

Primeiros Passos:

  1. Criar uma conta: Acesse github.com e crie sua conta gratuita.
  2. Criar um repositório: Clique em "New repository", defina um nome, descrição, e se será público ou privado.
  3. Conectar seu repositório local: Use git remote add origin <URL_DO_REPOSITORIO_NO_GITHUB> e depois git push -u origin main (ou a branch principal do seu projeto).

Recursos do GitHub (Foco em Colaboração)

O GitHub oferece diversas ferramentas para facilitar a colaboração em projetos.

Issues (Problemas/Tarefas):

Usadas para rastrear tarefas, bugs, melhorias e outras discussões relacionadas ao projeto. Cada issue pode ter responsáveis, etiquetas (labels) e marcos (milestones).

Pull Requests (PRs ou Solicitações de Merge):

O coração da colaboração no GitHub. Quando você quer propor alterações para um repositório (especialmente em um projeto colaborativo ou open source), você cria um Pull Request. Ele permite que outros revisem seu código, discutam as mudanças e, se aprovado, mesclem suas contribuições na branch principal.

Fluxo típico de um Pull Request:

  1. Faça um fork do repositório (se não tiver permissão de escrita direta).
  2. Clone seu fork localmente.
  3. Crie uma nova branch para suas alterações (git checkout -b minha-feature).
  4. Faça seus commits nessa branch.
  5. Envie a branch para o seu fork no GitHub (git push origin minha-feature).
  6. Abra um Pull Request do seu fork para o repositório original.
  7. Participe da discussão e revisão do código.
  8. Após aprovação, o mantenedor do projeto mescla seu PR.

Code Reviews (Revisões de Código):

Parte integral dos Pull Requests. Permite que outros desenvolvedores comentem linha por linha sobre as alterações propostas, sugerindo melhorias e identificando possíveis problemas antes da mesclagem.

Introdução ao GitLab

GitLab é uma plataforma DevOps completa, entregue como uma única aplicação. Assim como o GitHub, oferece hospedagem de repositórios Git, mas se destaca por integrar todo o ciclo de vida de desenvolvimento de software.

Principais Diferenças e Recursos:

  • Solução Completa de DevOps: Integra planejamento, build, segurança, deploy, monitoramento e mais, em uma única interface.
  • CI/CD Embutido e Poderoso: GitLab CI/CD é um dos seus pontos fortes, permitindo automação robusta de testes e deploys.
  • Opções de Hospedagem: Oferece tanto uma versão SaaS (gitlab.com) quanto uma versão auto-hospedada (self-managed) para empresas que precisam de mais controle.
  • Foco em Segurança: Ferramentas integradas para análise de segurança estática (SAST), dinâmica (DAST), de dependências e de contêineres.
  • Gerenciamento de Projetos: Funcionalidades robustas para planejamento ágil, incluindo quadros Kanban, épicos e roteiros.

Embora o GitHub seja mais popular para projetos open source, o GitLab é uma escolha forte para empresas que buscam uma solução DevOps unificada e com opções de auto-hospedagem.

Trabalhando com Branches - Conceitos

Branches (Ramificações) são ponteiros móveis para um commit. São uma das funcionalidades mais poderosas do Git, permitindo divergir da linha principal de desenvolvimento e continuar trabalhando sem bagunçar essa linha.

Por que usar Branches?

  • Desenvolvimento Isolado: Trabalhar em novas funcionalidades ou correções de bugs sem afetar o código estável (geralmente na branch main ou master).
  • Experimentação: Testar novas ideias sem medo de quebrar o projeto principal. Se não der certo, a branch pode ser descartada.
  • Colaboração: Vários desenvolvedores podem trabalhar em diferentes branches simultaneamente.
  • Organização: Manter o histórico de desenvolvimento limpo e organizado.

Branch Padrão:

Por padrão, a branch principal de um novo repositório é chamada master ou, mais recentemente, main.

Visualização:

Imagine branches como linhas de desenvolvimento paralelas que podem ser mescladas de volta à linha principal quando o trabalho estiver concluído.

"Branches são baratos e fáceis no Git. Use-os frequentemente!"

Comandos para Branches

Gerenciar branches no Git é feito com alguns comandos simples.

git branch

Lista todas as branches locais. A branch atual é marcada com um asterisco (*).

git branch # Criar uma nova branch (não muda para ela) git branch nome-da-nova-branch

git checkout <nome-da-branch> ou git switch <nome-da-branch> (mais novo)

Muda para a branch especificada.

git checkout nome-da-branch # ou git switch nome-da-branch # Criar e mudar para uma nova branch de uma vez git checkout -b nova-branch-feature # ou git switch -c nova-branch-feature

git merge <nome-da-branch>

Mescla as alterações da branch especificada na branch atual. Esteja na branch que vai receber as alterações (ex: main) antes de rodar o merge.

# Mude para a branch principal (ex: main) git switch main # Mescle a branch da feature na main git merge nome-da-branch-feature

git branch -d <nome-da-branch>

Deleta uma branch local (apenas se já foi mesclada). Use -D para forçar a deleção.

git branch -d nome-da-branch-mesclada

Resolução de Conflitos: Se o Git não conseguir mesclar automaticamente as alterações (arquivos modificados em ambas as branches nas mesmas linhas), ocorrerá um conflito de merge. Você precisará editar os arquivos para resolver os conflitos e depois fazer um commit.

Trabalho em Equipe com Git (GitHub Flow)

O GitHub Flow é um fluxo de trabalho simples e popular para colaboração usando Git e GitHub.

Passos do GitHub Flow:

  1. Crie uma Branch: Para qualquer nova funcionalidade, bugfix ou ideia, crie uma nova branch a partir da branch principal (main). Dê um nome descritivo (ex: feature/adicionar-login, fix/bug-no-carrinho).
  2. Adicione Commits: Faça alterações e commits na sua branch. Faça commits pequenos e focados com mensagens claras.
  3. Abra um Pull Request (PR): Quando sua branch estiver pronta para revisão ou discussão, abra um Pull Request no GitHub. Isso inicia uma conversa sobre suas alterações.
  4. Discuta e Revise o Código: Outros membros da equipe revisam seu código, fazem perguntas, sugerem melhorias. Você pode continuar adicionando commits à sua branch em resposta ao feedback.
  5. Faça o Deploy (Opcional, mas recomendado): Idealmente, teste suas alterações em um ambiente de homologação ou staging a partir da sua branch antes de mesclar.
  6. Mescle (Merge): Uma vez que o PR é aprovado e os testes passam, mescle a branch na branch principal (main). A branch da feature pode ser deletada após o merge.

Boas Práticas:

  • Mantenha a branch main sempre em estado de deploy (pronta para produção).
  • Faça Pull Requests pequenos e focados.
  • Comunique-se claramente nas descrições dos PRs e nos comentários.
  • Atualize sua branch local com a main frequentemente (git pull origin main na sua branch e resolva conflitos) para evitar grandes divergências.

Conclusão do Módulo 2

Parabéns!

Você concluiu o Módulo 2: Git, GitHub e GitLab. Agora você tem uma compreensão sólida sobre:

  • O que é controle de versão e a importância do Git.
  • Os comandos básicos do Git para gerenciar seus projetos.
  • Como usar ferramentas visuais e plataformas como GitHub e GitLab.
  • A importância de branches para desenvolvimento isolado e colaborativo.
  • Como trabalhar em equipe usando Pull Requests e o GitHub Flow.

Próximos Passos:

  • Pratique! Crie repositórios para seus projetos pessoais.
  • Contribua para projetos open source no GitHub.
  • Explore comandos mais avançados do Git conforme sua necessidade.
  • Aprofunde-se em estratégias de branching e fluxos de CI/CD.

Sucesso na sua jornada de desenvolvimento colaborativo!