DevPath · Aprenda a programar ESPTEN

Node.js, npm e testes

Controle de versão com Git

O que é o Git?

O Git é um sistema de controle de versão: uma ferramenta que salva o histórico de mudanças do seu projeto. Ele permite ver o que mudou, quando e por que, voltar para uma versão anterior e colaborar com outras pessoas sem atrapalhar o trabalho umas das outras.

Não confunda Git (a ferramenta) com GitHub (um serviço web para hospedar repositórios Git na nuvem e colaborar). O Git funciona perfeitamente sem o GitHub; o GitHub é um dos muitos lugares onde você pode publicar seu repositório.

O fluxo básico: três zonas

O Git organiza seu trabalho em três zonas. Entender esse fluxo é a chave de tudo:

  1. Working directory (diretório de trabalho): seus arquivos do jeito que você os edita. É aqui que você escreve código.
  2. Staging area (área de preparação ou índice): uma "sala de espera" onde você coloca as mudanças que quer incluir na próxima foto.
  3. Repository (repositório): o histórico de commits. Cada commit é uma foto permanente do projeto em um dado momento.
  [Working dir]  --git add-->  [Staging]  --git commit-->  [Repositório]
   edita aqui                  prepara                      histórico

Comandos essenciais

git init                 # cria um repositório Git na pasta atual
git status               # mostra quais arquivos mudaram e sua zona
git add arquivo.js       # move um arquivo para o staging
git add .                # move TODAS as mudanças para o staging
git commit -m "Mensagem" # cria uma foto com as mudanças preparadas
git log                  # lista o histórico de commits
git log --oneline        # histórico resumido (uma linha por commit)

A mensagem de commit descreve o que e por que você mudou algo. Uma boa mensagem está no presente imperativo: "Adiciona validação ao formulário de login".

Branches (ramos) e merge

Um branch (ramo) é uma linha de desenvolvimento independente. O branch principal costuma se chamar main. Criar um branch te permite trabalhar em uma nova funcionalidade sem mexer no código estável, e depois fundi-lo (merge) quando estiver pronto.

git branch                    # lista os branches (o atual vem marcado com *)
git branch nova-funcao        # cria um branch novo
git checkout nova-funcao      # muda para esse branch
git checkout -b nova-funcao   # cria E muda para o branch em um só passo
# ... você faz commits no branch ...
git checkout main             # volta para a main
git merge nova-funcao         # funde as mudanças do branch na main

No Git moderno você também pode usar git switch (mudar de branch) e git switch -c (criar e mudar), uma alternativa mais clara ao checkout.

.gitignore: o que NÃO é versionado

Nem tudo deve entrar no histórico. As dependências instaladas (node_modules), os arquivos de configuração local e os segredos não são versionados: ocupam muito espaço, são regenerados ou são privados. Para excluí-los você cria um arquivo chamado .gitignore:

# .gitignore
node_modules/
.env
dist/
*.log

O node_modules é reconstruído com npm install a partir do package.json, então versioná-lo não acrescenta nada e só gera ruído.

Remotos e GitHub

Um remoto é uma cópia do repositório hospedada em outro lugar (por exemplo, no GitHub). Ele te permite fazer backup e colaborar.

git remote add origin https://github.com/usuario/repo.git  # vincula o remoto
git push -u origin main   # envia seus commits para o remoto (primeira vez com -u)
git push                  # envia os commits seguintes
git pull                  # traz e funde as mudanças do remoto
git clone https://github.com/usuario/repo.git  # copia um repo existente

O nome origin é a convenção para o remoto principal. O push envia seu trabalho para o GitHub; o pull traz o que outras pessoas tiverem enviado. É assim que uma equipe mantém o código sincronizado.

Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Testes e TDDQualidade e empacotamento →