¿Cuál es el algorithm que usa git para encontrar una confirmación por un sha-1 parcial (al less los primeros 4 caracteres)?

¿Cuál es el algorithm que usa git para encontrar una confirmación por un sha-1 parcial (al less los primeros 4 caracteres). ¿Hay implementaciones de dicho algorithm?

Una manera muy simple (pero ineficaz) de encontrar el SHA1 completo dado un " 01234 " parcial (un " SHA1 corto ") es:

 git rev-list --all --objects | grep ^01234 

La forma real es:

 git rev-parse --verify 01234 

Se ilustra en commit 6269b6b

Enseñe a get_describe_name() para pasar la sugerencia de desambiguación por la callchain a get_short_sha1() .

Para que pueda ver el algorithm en la function sha1_name.c # get_short_sha1 () , que se verá en:

  • objects : find_short_object_filename(len, hex_pfx, &ds);
  • y en los files del package : find_short_packed_object(len, bin_pfx, &ds);
    (Ver " Git Internals – Packfiles ")