23. Dentro do Git: Trabalhando diretamente com objetos do git

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 hist --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 hist --max-count=1
* 8029c07 2011-03-09 | Added index.html. (HEAD, master) [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.

Nota: Se você especificar o alias como «type» e «dump», como descrito na lição correspondente, você pode entrar os comandos git type e git dump ao invés de um comando longo (que eu nunca memorizo).

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

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.