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 хэша в последнем коммите.