Почему Git использует SHA1 * сжатых * объектов, а не SHA1 исходных объектов? - PullRequest
11 голосов
/ 26 ноября 2011

Мне просто любопытно, почему был сделан этот выбор - он в основном исключает изменение алгоритма сжатия, используемого Git - потому что он не использует SHA1 необработанных больших двоичных объектов.Возможно, здесь есть некоторые соображения эффективности.Может быть, ZLIB быстрее сжимает файл, чем алгоритм SHA1 при создании хэша, поэтому сжатие до хэширования происходит быстрее?

Вот ссылка на оригинальный Git READMEby Linus: http://git.kernel.org/?p=git/git.git;a=blob;f=README;h=27577f76849c09d3405397244eb3d8ae1d11b0f3;hb=e83c5163316f89bfbde7d9ab23ca2e25604af290

А вот соответствующий параграф:

"В содержании есть несколько видов объектов:база данных адресуемой коллекции. Все они дефлированы с помощью zlib и начинаются с тега их типа и информации о размере данных. Хеш SHA1 всегда является хешем сжатого объекта, а не оригиналомодин ".

1 Ответ

14 голосов
/ 26 ноября 2011

Как вы сказали, это оригинал README, когда Git был запущен.С тех пор он был изменен таким образом, что SHA1 вычисляется до сжатия.

Стоит отметить, что хэш SHA-1, используемый для именования объекта, является хешем исходных данных плюс этотзаголовок, поэтому файл 'sha1sum' не соответствует имени объекта для файла.( Историческая справка: на заре эпохи мерзавцев хеш был SHA-1 сжатого объекта. )

http://schacon.github.com/git/user-manual.html#object-details

...