Git: внутренности репозитория
Если мы посмотрим, что хранится в директории .git, то увидим, среди прочего, файлы с непонятными длинными именами, которые похожи на хэши и директории, имена которых похожи на шестнадцатиричные значения.
Оказывается, идентификатор коммита используется для формирования директории и файла, содержащих сведения о коммите. Таким образом, в директории .git/objects создается директория, имя которой равно двум первым символам идентификатора коммита, а внутри этой директории создается файл, имя которого - есть оставшаяся часть идентификатора коммита.
Используя идентификаторы объектов репозитория, можно получить информацию о любом из них. Например, можно посмотреть тип объекта:
Если указанное значение хэша являлось идентификатором коммита, вывод будет содержать:
Если теперь выполнить:
То мы увидим содержимое коммита (идентификаторы объектов, которые были добавлены вместе с коммитом, сведения об авторе и сообщение к коммиту). И да, идентификаторы объектов, включенных в коммит, сразу будут с типами и о них также можно узнать с помощью команды git cat-file.
Что это дает? На мой взгляд, такая возможность позволяет рассмотреть детально любой объект репозитория, не оставляя таким образом никаких "магических" метаданных и т.п. - вы можете точно знать, чем является тот или иной объект в файловой системе репозитория.