Para comprovar a execução completa de cada laboratório:
- Antes de iniciar os comandos, digite:
script lab1-sessaoN.txt(Substitua N pelo número do laboratório.)
-
Realize todos os passos normalmente.
-
Ao final, digite:
exitIsso salvará um log da sessão, que pode ser entregue.
Explorar o histórico de commits, navegação por versões anteriores e reversão de mudanças no Git.
script lab1-sessao1.txt- Crie um diretório e entre nele:
mkdir git-workshop && cd git-workshop- Inicialize um repositório Git:
git init- Use o repositório já inicializado e execute:
echo "v1" > notas.txt
git add . && git commit -m "v1"
echo "v2" >> notas.txt && git commit -am "v2"
echo "v3" >> notas.txt && git commit -am "v3"- Visualize o histórico:
git log --oneline- Verifique uma versão antiga:
git checkout HEAD~2
cat notas.txt
git checkout main- Visualize o histórico:
git log --oneline- Desfaça o último commit com
reset:
git reset --soft HEAD~1
git commit -m "Corrige v2 revertido"- Visualize o histórico:
git log --onelineexitAdicione o arquivo no Git
lab1-sessao1.txt.
Fará 5 alterações incrementais no arquivo README.md e usará comandos para explorar e manipular o histórico.
script lab1-sessao2.txt-
Crie e registre o primeiro conteúdo:
echo "v1" > README.md git add README.md git commit -m "v1"
-
Adicione novas linhas e registre mais 4 alterações:
echo "v2" >> README.md && git commit -am "v2" echo "v3" >> README.md && git commit -am "v3" echo "v4" >> README.md && git commit -am "v4" echo "v5" >> README.md && git commit -am "v5"
exitAdicione o arquivo no Git
lab1-sessao2.txt.
script lab1-sessao3.txt-
Ver histórico simplificado:
git log --oneline
-
Ver detalhes do último commit (autor, e-mail, data, hash):
git log -1
-
Ver autor e e-mail configurados globalmente:
git config user.name git config user.email
-
Comparar mudanças entre os últimos commits:
git diff HEAD~1 HEAD
exitAdicione o arquivo no Git
lab1-sessao3.txt.
script lab1-sessao4.txt-
Reverter o último commit sem perder o histórico:
git revert HEAD
-
Voltar 2 commits e descartar as alterações posteriores:
git reset --hard HEAD~2
⚠️ Como ogit reset --hardfunciona?
- Visualize o histórico:
git log --onelineexitAdicione o arquivo no Git
lab1-sessao4.txt.
Entender como o Git armazena o conteúdo dos arquivos em cada commit usando blobs e snapshots.
script lab1-sessao5.txt- Crie um arquivo:
echo "linha 1" > arquivo.txt
git add arquivo.txt
git commit -m "commit 1"- Verifique o hash do blob criado no commit:
git ls-tree HEADExemplo de saída:
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 arquivo.txt
Copie o hash do blob para o próximo passo.
- Veja o conteúdo do blob armazenado:
git cat-file -p <hash-do-blob>- Faça uma nova alteração no arquivo:
echo "linha 2" >> arquivo.txt
git commit -am "commit 2"- Veja o novo hash do blob:
git ls-tree HEAD- Compare os blobs:
git cat-file -p <novo-hash>
git cat-file -p <hash-anterior>Você verá que o Git armazenou um novo blob apenas porque o conteúdo do arquivo mudou.
- O Git armazena blobs para representar o conteúdo dos arquivos.
- Cada commit referencia um snapshot completo do repositório, mas reutiliza blobs para arquivos que não foram alterados.
- Isso torna o Git eficiente mesmo com snapshots completos.
exitAdicione o arquivo no Git lab1-session5.txt
Explorar o funcionamento interno do Git analisando os objetos armazenados no diretório .git/objects.
script lab1-session6.txt-
Acesse o repositório
-
Crie um arquivo e faça o commit:
echo "linha 1" > arquivo.txt
git add arquivo.txt
git commit -m "algum commit"- Liste o conteúdo do diretório
.git/objects:
ls .git/objects- Liste os arquivos armazenados como objetos:
find .git/objects -type f- Identifique o tipo de cada objeto usando o hash:
git rev-parse HEAD # obter o hash do commit
git cat-file -t <hash> # tipo do objeto
git cat-file -p <hash> # conteúdo do objeto- Identifique os objetos internos:
git ls-tree HEAD
# Use os hashes retornados para:
git cat-file -t <hash>
git cat-file -p <hash>Teste para blobs (conteúdo de arquivos), trees (estrutura de diretórios) e commits (metadados + ponteiros).
- O Git armazena tudo como objetos compactados com endereçamento por hash.
- Cada commit referencia uma tree, que referencia blobs (arquivos).
- Objetos inalterados são reutilizados entre commits, mantendo o Git eficiente.
exitEnvie o arquivo
lab1-session6.txtcomo evidência da execução.