Отсутствуют хэши в папке объектов .git - PullRequest
1 голос
/ 16 июня 2019

Я изучал, как работает git. Я читал, что Git хранит все в папке объектов. Сначала он создает SHA1-хэш файла и сохраняет его в папке Object. Я попробовал следующие команды на 1 из моего репозитория, но я не смог найти хеш-файл в каталоге объектов, но с помощью команды cat-file я смог увидеть команду. Есть ли что-то, что мне не хватает. Ниже приведены шаги, которые я сделал, чтобы понять.

Я сделал git log, чтобы найти последний коммит,

enter image description here

, затем я cat-file упомянутого идентификатора коммита и может видеть хэш файла дерева.

enter image description here

Если я захожу в папку объектов и ищу папку с двумя первыми символами хэша, я не могу найти папку.

enter image description here

Но все же я могу получить файл.

enter image description here

Я попробовал это для файлов (blob) также из cat-файла дерева, но не смог найти файлы с хешем в папке объектов. Может кто-нибудь помочь мне понять, почему?

1 Ответ

2 голосов
/ 16 июня 2019

Вы должны взглянуть на:

.git/objects/pack

… тоже.

Git действительно использует систему объектов, которую вы описываете, но в конце концов, когда их слишком много, Git поместитсборщик мусора отвечает за упаковку их, то есть собирает некоторые из них, затем объединяет их в один файл (однако без сжатия, поскольку объекты уже сжаты. Поэтому они непосредственно доступны в середине пакетафайл).Кроме того, индексный файл "*. Idx " также создан для их быстрого извлечения.

Это оба очищает полезные inode и пространство, остающееся в конце последнего блока каждого файлав файловой системе, но операция требует времени и ресурсов.Вот почему Git будет запускать эту операцию только в определенное время.

См .: Git Internals: Pack Files .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...