Nombres de files del package Git: ¿cuál es el resumen?

Git almacena objects individuales en .git/objects/ab/cdefgh... donde ab es el primer byte del resumen de SHA1.

Sin embargo, los files del package no siguen la misma política de nombres, y no puedo encontrar documentation sobre cómo se nombra. ¿Alguna idea?

Los files del package se guardan en objects/pack , que está documentado en el layout de gitrepository . Dentro de este directory, se almacenan como pares de un file de índice y el file del package en sí, llamado, por ejemplo:

 pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack 

Cómo se calcula el SHA1sum en esos nombres de file se explica en la documentation de git-pack-objects (mi énfasis):

Escriba en un par de files (.pack y .idx), usando <base-name> para determinar el nombre del file creado. Cuando se utiliza esta opción, los dos files se escriben en <nombre-base> – <SHA1>. <Paquete, idx> files. <SHA1> es un hash de los nombres de objects orderados para hacer que el nombre del file resultante se base en el contenido del package y se escriba en la salida estándar del command.

Los nombres de los objects son los SHA1sums de los objects dentro del file del package.

La respuesta es "el hash SHA-1 de todo el file del package, less los últimos 20 bytes", o "un resumen hexadecimal de los últimos 20 bytes" (ambos son equivalentes).

Los últimos 20 bytes del file son la "sum de comprobación del tráiler", que en sí misma es un hash SHA-1 de la totalidad del file (less los últimos 20 bytes).

Esto se modificó en 2013 (anteriormente era la sum SHA-1 de todos los valores hash en el file). Tenga en count que la documentation ahora simplemente dice "es un hash basado en el contenido del package". El autor explícitamente no garantiza cómo se calcula el SHA-1 (del logging de compromiso : "Esperamos que esto disuada a los lectores de depender del cálculo antiguo o nuevo").