usar tag practices delete create crear como best git directory-structure

tag - ¿Por qué git almacena objetos en directorios con los dos primeros caracteres del hash?



git tag push (1)

Estoy diseñando una estructura de directorios basada en UUID, así que estoy viendo qué hace git para ver si sería un buen modelo.

Puedo ver que git almacena objetos en una estructura donde los dos primeros caracteres del hash se usan como un directorio y el resto del hash es el nombre del archivo.

Lo que me pregunto es por qué? Si hay una gran ventaja de usar los directorios, ¿por qué no se crean más subdirectorios ... digamos un directorio para cada uno o dos caracteres en el hash que crea un árbol? Si no hay una gran ventaja, ¿por qué el directorio con los dos primeros caracteres?


Git cambia de "objetos sueltos" (en archivos nombrados como 01/23456789abcdef0123456789abcdef01234567 ) a "paquetes" cuando el número de objetos sueltos excede una constante mágica (6700 por defecto pero configurable, gc.auto ). Dado que los valores de SHA-1 tienden a estar bien distribuidos, pueden aproximarse a los objetos sueltos totales al buscar en un solo directorio. Si hay más de (6700 + 255) / 256 = 27 archivos en uno de los directorios de objetos, es hora de un paquete de archivos.

Por lo tanto, no hay necesidad de una ampliación adicional ( 01/23/4567... ): es poco probable que obtenga tantos objetos en un directorio. Y, de hecho, una mayor expansión tendiente a hacer que sea más difícil detectar que es el momento de un empaquetamiento automático, a menos que establezca un valor de umbral más alto (que 6700), porque (27 + 255) / 256 es 1, por lo que querría contar todo en 01/*/ lugar de solo 01/ .

Se podría usar 0/1234567... y permitir que hasta ~ 419 objetos por directorio obtengan el mismo comportamiento, pero las exploraciones de directorio lineales (en cualquier sistema que aún las use) son O (n 2 ), y 27 2 es un mero 729, mientras que 419 2 es 175561. [Editar: eso solo se aplica a la creación de archivos, donde tiene una búsqueda en dos etapas, una vez para encontrar que está bien crear y una segunda para encontrar una ranura o anexar. Las búsquedas siguen siendo O (n).]