Dentro do Git: Trabalhando diretamente com objetos do Git (bonus)

Metas

  • Explorar a estrutura dos objetos do banco de dados.
  • Usar hashes SHA1 para pesquisar por conteúdo no repositório.

Vamos examinar os objetos do Git com algumas ferramentas.

01 Procurando pelo último commit

Execute

git log --max-count=1

Esse comando deve encontrar o último commit nesse repositório. A hash SHA1 provavelmente é diferente em nossos sistemas, mas você deve ver algo como isto.

Resultado

$ git log --max-count=1
* 8029c07 2011-03-09 | Added index.html. (HEAD, main) [Alexander Shvets]

02 Exibição do último commit

Com a hash SHA1, tal como acima...

Execute

git cat-file -t <hash>
git cat-file -p <hash>

Eu vejo isso ...

Resultado

$ git cat-file -t 8029c07
commit
$ git cat-file -p 8029c07
tree 096b74c56bfc6b40e754fc0725b8c70b2038b91e
parent 567948ac55daa723807c0c16e34c76797efbcbed
author Alexander Shvets <alex@githowto.com> 1299684476 -0500
committer Alexander Shvets <alex@githowto.com> 1299684476 -0500

Added index.html.

Isso exibe o objeto de commit, que está no início do branch main.

03 Busca em árvore

Nós podemos exibir a árvore referenciada no commit. Isso deveria ser uma descrição do arquivo no nosso projeto (para um commit específico). Use a hash SHA1 da string da árvore listada acima.

Execute

git cat-file -p <treehash>

Aqui está a minha árvore ...

Resultado

$ git cat-file -p 096b74c
100644 blob 28e0e9d6ea7e25f35ec64a43f569b550e8386f90	index.html
040000 tree e46f374f5b36c6f02fb3e9e922b79044f754d795	lib

Eu posso ver o arquivo e a pasta da lib do index.html.

04 Exibir diretório da lib

Execute

git cat-file -p <libhash>

Resultado

$ git cat-file -p e46f374
100644 blob c45f26b6fdc7db6ba779fc4c385d9d24fc12cf72	hello.html

Tem um arquivo hello.html.

05 Exibir o arquivo hello.html

Execute

git cat-file -p <hellohash>

Resultado

$ git cat-file -p c45f26b
<!-- Author: Alexander Shvets (alex@githowto.com) -->
<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

E aí está. Objetos árvores, objetos de commits e objetos blob são exibidos diretamente do repositório do Git. E isso é tudo que tem - árvores, blobs e commits.

06 Explore você mesmo

O repositório Git pode ser explorado manualmente. Tente achar manualmente o arquivo hello.html original do primeiro commit com ajuda da hash SHA1 referenciada no último commit.