Имена файлов Git Pack - что такое дайджест? - PullRequest
5 голосов
/ 29 марта 2011

Git хранит отдельные объекты в .git/objects/ab/cdefgh..., где ab - первый байт дайджеста SHA1.

Однако файлы пакета не следуют той же политике именования, и я не могу найти документацию о том, как они названы. Есть идеи?

Ответы [ 2 ]

9 голосов
/ 29 марта 2011

Файлы пакета хранятся в objects/pack, что задокументировано в макете репозитория .В этом каталоге они хранятся в виде пар файла индекса и самого файла пакета, называемого, например:

pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx
pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack

Как вычисляется сумма SHA1 в этих именах файлов, объясняется в git-pack-objects документация (мой акцент):

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

Имена объектов суммы SHA1 объектов в файле пакета.

2 голосов
/ 01 апреля 2016

Ответом является либо «хэш SHA-1 всего файла пакета, минус последние 20 байтов», либо «шестнадцатеричный дайджест последних 20 байтов» (оба эквивалентны).

последние 20 байтов файла - это "контрольная сумма трейлера", которая сама по себе является SHA-1-хэшем всего файла (минус последние 20 байтов).

Это было изменено в 2013 году (ранее это была сумма SHA-1 всех хэшей в файле). Обратите внимание, что документация теперь просто гласит "это хеш, основанный на содержимом пакета". Автор явно не гарантирует, как рассчитывается SHA-1 (из журнала коммитов : «Надеюсь, это не позволит читателям полагаться на старый или новый расчет».)

...