¿Por qué Git usa el SHA1 de los objects * comprimidos en lugar del SHA1 de los objects originales?

Tengo curiosidad por saber por qué se hizo esta elección, básicamente descarta cambiar el algorithm de compression utilizado por Git, porque no usa el SHA1 de los blobs crudos. Tal vez hay alguna consideración de eficiencia aquí. Tal vez ZLIB es más rápido en la compression de un file que el algorithm SHA1 en la creación del hash, por lo que la compression antes del hashing es más rápida.

Aquí hay un enlace al Git READMEby Linus original: http://git.kernel.org/?p=git/git.git;a=blob;f=README;h=27577f76849c09d3405397244eb3d8ae1d11b0f3;hb=e83c5163316f89bfbde7d9ab23ca2e25604af290

Y aquí está el párrafo relativo:

"Hay varios types de objects en la database de recolección de contenido direccionable. Todos están desinflados con zlib, y comienzan con una label de su tipo e información de tamaño sobre los datos. El hash SHA1 siempre es el hash del comprimido. object, no el original ".

Como dijiste, es el file README original , cuando se inició Git. Desde entonces, se ha cambiado para que se calcule SHA1 antes de comprimir.

Vale la pena señalar que el hash SHA-1 que se usa para nombrar el object es el hash de los datos originales más este encabezado, por lo que el file 'sha1sum' no coincide con el nombre del object para el file. ( Nota histórica: en los albores de la era de git, el hash era el SHA-1 del object comprimido ) .

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