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.