kb/objects
Четыре типа объектов и SHA-1 как ключ к каждому. Что лежит в `.git/objects/`, почему Git это key-value хранилище, как `git add` создаёт blob и как `git commit` собирает tree. Самая важная глава для понимания всего остального.
Объект Git, который хранит содержимое одного файла. Только байты, без имени, прав и даты. Имя файла лежит в `tree`, не в blob.
Объект Git: снимок состояния всего проекта (через tree) плюс метаданные - автор, коммиттер, дата, родители, сообщение. SHA коммита включает SHA родителя, что делает историю криптографически связанной.
Сжатый файл в `.git/objects/pack/`, в который Git упаковывает множество loose-объектов, чтобы экономить место и ускорять сетевые операции. Использует дельта-компрессию между похожими объектами.
40-символьный хэш, по которому Git адресует объекты. Считается от содержимого с префиксом типа. Сломан криптографически в 2017 (SHAttered), но в Git до сих пор основной - миграция на SHA-256 идёт медленно.
Именованный указатель на коммит. Два вида: lightweight (просто файл с SHA в `refs/tags/`) и annotated (отдельный объект в `objects/` с автором, датой, подписью). Для релизов - annotated.
Объект Git, который хранит список того, что лежит в одной директории: записи `(права, тип, SHA, имя)`. Рекурсивно ссылается на другие tree для поддиректорий.