Почему Git использует SHA1 из * сжатых объектов, а не SHA1 исходных объектов?

Мне просто интересно, почему этот выбор был сделан - в основном это исключает изменение алгоритма сжатия, используемого 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

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

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

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