Módulo 10 · Aula 10.3 · Git: o primeiro commit e o histórico
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 10 h/a | ⭐⭐⭐ | Git (linha de comando) | C6, C7 |
Objetivos de aprendizagem
- Explicar para que serve controle de versões.
- Criar um repositório, preparar arquivos e fazer commits.
- Ler o histórico e a diferença entre duas versões.
- Escrever mensagens de commit que digam o que mudou.
- Usar
.gitignorepara deixar fora o que o computador recria sozinho.
Pré-requisitos
Ter jogos prontos dos módulos anteriores.
Materiais
Git instalado (git-scm.com); terminal (no Windows, o Git Bash que vem com o Git); Caça-Estrelas (Módulo 0) e Chave da Porteira (Módulo 9), copiados para uma pasta de trabalho.
Conceitos
O problema. Quem nunca teve jogo_final.sb3, jogo_final2.sb3, jogo_final_agora_vai.sb3? O Git resolve isso: uma pasta só, e um histórico de "fotos" do projeto, cada uma com data, autor e um recado.
Palavras do Git.
| Palavra | Quer dizer |
|---|---|
| repositório | a pasta do projeto com o histórico guardado dentro (na pasta oculta .git) |
| commit | uma "foto" do projeto, com recado |
preparar (git add) | escolher o que vai entrar na próxima foto |
histórico (git log) | a lista de fotos |
diferença (git diff) | o que mudou, linha por linha |
Os três passos de sempre. Mexer nos arquivos → git add → git commit -m "recado".
Mensagem de commit. Diz o que mudou, no presente ou no particípio, curta: "Jogador mais rápido", "Sol fraco: labirinto de noite". Mensagem ruim: "mudanças", "agora vai", "aaa".
Nome e e-mail. Todo commit leva autor. Antes do primeiro, cada aluno configura o próprio nome. O e-mail aparece no histórico e, no GitHub, fica público: a escola pode orientar o uso de um e-mail institucional ou do endereço que o próprio GitHub oferece para esconder o e-mail.
Arquivos de texto e arquivos fechados. O Git mostra a diferença linha por linha em arquivos de texto (scripts .gd, cenas .tscn, .json do GDevelop). Em arquivos fechados (o .sb3 do Scratch, imagens), ele guarda a versão, mas não mostra o que mudou dentro.
.gitignore. Lista do que o Git deve ignorar. No Godot, a pasta .godot/ é recriada sozinha ao abrir o projeto e não deve ir para o repositório. Todos os projetos Godot do curso já trazem um .gitignore com a linha .godot/.
Exemplos
Saídas reais, de uma pasta de teste feita na preparação do curso (o nome "Ana Clara" é de uma aluna fictícia; o caminho da pasta foi trocado por um de exemplo).
Primeiro commit do Caça-Estrelas:
$ git init -b main
Initialized empty Git repository in C:/Users/aluno/caca-estrelas/.git/
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
caca-estrelas.sb3
project.json
nothing added to commit but untracked files present (use "git add" to track)
$ git add .
warning: in the working copy of 'README.md', LF will be replaced by CRLF the next time Git touches it
$ git commit -m "Primeira versão do Caça-Estrelas"
[main (root-commit) c4c605e] Primeira versão do Caça-Estrelas
3 files changed, 77 insertions(+)
create mode 100644 README.md
create mode 100644 caca-estrelas.sb3
create mode 100644 project.json
$ git log
commit c4c605e104d62aded5733fa9a3fb4c6ed6ec5e29
Author: Ana Clara <ana.clara@exemplo.com>
Date: Fri Oct 30 08:53:20 2026 -0300
Primeira versão do Caça-Estrelas
$ git log --oneline
c4c605e Primeira versão do Caça-EstrelasO aviso LF will be replaced by CRLF é só o Git do Windows avisando que vai ajustar o fim das linhas do texto. Não é erro.
.gitignore e diferença no Chave da Porteira:
$ git status --short (sem .gitignore)
?? .godot/
?? cenas/
?? ferramentas/
?? materiais/
?? modelos/
?? project.godot
?? scripts/
$ git status --short (com .gitignore)
?? .gitignore
?? cenas/
?? ferramentas/
?? materiais/
?? modelos/
?? project.godot
?? scripts/
$ git diff
diff --git a/scripts/jogador.gd b/scripts/jogador.gd
index e76f4e7..5bcd7fb 100644
--- a/scripts/jogador.gd
+++ b/scripts/jogador.gd
@@ -2,7 +2,7 @@ extends CharacterBody3D
## Sertanejo do labirinto. Controle "de tanque": esquerda e direita giram o corpo,
## frente e trás andam para onde ele está olhando. A câmera vai presa atrás dele.
-const VELOCIDADE := 4.0 # metros por segundo
+const VELOCIDADE := 5.0 # metros por segundo
const GIRO := 2.5 # radianos por segundo (cerca de 143 graus)
var gravidade: float = ProjectSettings.get_setting("physics/3d/default_gravity")Os textos entre parênteses ao lado de git status --short foram postos aqui para explicar; não fazem parte do comando. ?? quer dizer "arquivo novo, ainda fora do Git". No git diff, a linha com - é a antiga e a com + é a nova.
Tutorial passo a passo
Parte A. Configurar (40 min)
- Abra o Git Bash na pasta de trabalho.
- Configure o seu nome e o e-mail combinado com a escola:
git config --global user.name "Seu Nome"git config --global user.email "email-combinado@exemplo.com"Parte B. Primeiro commit (120 min)
- Entre na pasta do Caça-Estrelas (
cd caca-estrelas) e rode, um de cada vez, conferindo a saída com a dos Exemplos:
git init -b maingit statusgit add .git commit -m "Primeira versão do Caça-Estrelas"git log --onelineParte C. Projeto Godot com .gitignore (120 min)
- Na pasta do seu Projeto 6, confira se existe
.gitignorecom a linha.godot/. Rodegit init -b mainegit status --short: a pasta.godot/não pode aparecer. - Faça o primeiro commit.
- Mude a velocidade do jogador, rode
git diffe leia a diferença. Faça o commit com uma mensagem boa. - Faça mais três mudanças pequenas, cada uma com o seu commit.
Parte D. Voltar no tempo, com cuidado (120 min)
git log --onelinemostra os códigos curtos dos commits. Para ver como um arquivo era num commit antigo, sem mudar nada:git show CODIGO:scripts/jogador.gd.- Para desfazer uma mudança que ainda não foi para commit:
git restore scripts/jogador.gd. Atenção: o que não estava em commit se perde.
Imagens
Não há capturas: o Git é usado no terminal, e as saídas reais estão nos Exemplos.
Indicação da interface
| Comando | O que faz |
|---|---|
git init -b main | transforma a pasta em repositório, com o ramo principal chamado main |
git status / git status --short | o que mudou e o que está preparado |
git add . | prepara tudo o que mudou |
git commit -m "..." | tira a foto, com recado |
git log / git log --oneline | histórico |
git diff | diferença do que ainda não foi preparado |
git show CODIGO:arquivo | o arquivo como era naquele commit |
git restore arquivo | descarta a mudança que não foi para commit |
O Godot 4.7.2 também tem um menu Controle de Versão (nome lido das traduções), que precisa de um complemento à parte. O curso usa a linha de comando, que funciona igual para qualquer ferramenta. O GitHub Desktop (desktop.github.com) é uma opção com botões, mas não foi testado nesta versão do curso.
O código completo
chave-da-porteira/.gitignore:
.godot/Explicação do código
Uma linha basta: tudo dentro de .godot/ fica de fora. O Godot recria essa pasta quando o projeto é aberto (importa imagens, modelos e guarda configurações do editor).
Resultado esperado
Dois repositórios (Caça-Estrelas e Projeto 6), o segundo com pelo menos cinco commits de mensagens claras e sem a pasta .godot/.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
Author identity unknown | nome e e-mail não configurados | Parte A |
.godot/ aparece no git status | falta o .gitignore, ou foi criado depois do git add | criar o .gitignore; se já entrou, git rm -r --cached .godot |
not a git repository | o terminal está em outra pasta | cd para a pasta do projeto |
| abriu um editor estranho e não sai | fez git commit sem -m | usar sempre -m "recado" (no editor Vim, Esc e depois :q! sai sem salvar) |
Exercício guiado
Por que a pasta .godot/ fica fora do repositório? (Resposta: o Godot recria tudo nela; guardar só ocupa espaço e gera diferenças inúteis a cada vez que alguém abre o projeto.)
Desafio individual
Leia o histórico de um colega (git log) e diga, só pelas mensagens, o que ele fez no projeto. As mensagens contam a história?
Desafio avançado (opcional)
Descubra o que faz git log --stat e use no seu Projeto 6.
Critérios de avaliação
- Commits com mensagens que dizem o que mudou.
.gitignorefuncionando.- Lê um
git diffe explica.
Checklist de conclusão
Extensão
Pense em algo fora da computação que tem "histórico de versões" (um caderno de receitas, uma redação com rascunhos). Como seria um commit ali?