23. Git всередині: Робота безпосередньо з об'єктами git

Цілі

  • Дослідити структуру бази даних об'єктів
  • Навчитися використовувати SHA1 хеши для пошуку вмісту в репозиторії

Давайте дослідимо об'єкти git за допомогою деяких інструментів.

01 Пошук останнього коміту

Виконайте:

git hist --max-count=1

Ця команда повинна показати останній коміт у репозиторій. SHA1 хеш у вашій системі, ймовірно, відрізняється від мого, але ви побачите щось на зразок цього.

Результат:

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

02 Вивід останнього коміту

За допомогою SHA1 хешу з коміту, зазначеного вище…

Виконайте:

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

Ось що виходить у мене…

Результат:

$ 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.

Примітка: Якщо ви задали аліаси «type» і «dump», як описано в уроці про аліаси, можете вводити команди git type и git dump замість довгих команд (які я ніколи не запам'ятовую).

Це вивід об'єкта коміту, який знаходиться на чолі гілки master.

03 Пошук дерева

Ми можемо вивести дерево каталогів, посилання на який йде в коміті. Це має бути опис файлів (верхнього рівня) в нашому проекті (для конкретного коміту). Використовуйте SHA1 хеш з рядка «дерева», зі списку вище.

Виконайте:

git cat-file -p <treehash>

Ось як виглядає моє дерево…

Результат:

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

Так, я бачу index.html і каталог lib.

04 Вивід каталогу lib

Виконайте:

git cat-file -p <libhash>

Результат:

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

Існує файл hello.html.

05 Вивід файлу hello.html

Виконайте:

git cat-file -p <hellohash>

Результат:

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

А ось і він. Ми вивели об'єкти комітів, об'єкти дерев і об'єкти блобів безпосередньо з репозиторію git. Це все, що є – блоби, дерева і коміти.

06 Дослідіть самостійно

Дослідіть git репозиторій вручну самостійно. Дивіться, чи вдасться вам знайти оригінальний файл hello.html з найпершого коміту вручну по посиланнях SHA1 хеша в останньому коміті