Git: ¿Cómo se genera el valor SHA1 de un object de tree?

Como sugiere el título, ¿está el valor basado en el contenido de todos los objects del tree (recursivamente) dentro?

A saber, ¿puedo considerar dos objects de tree como el mismo tree de files exactamente (incluyendo todos los subdirectorys y files) si tienen el mismo valor hash?

Puede ver algunos detalles aproximados sobre qué se usa para calcular el tree SHA aquí .

Puede encontrar más información sobre el formatting binary en el que se almacena el tree aquí .

El SHA real que se utiliza es solo el SHA del búfer descrito en esa versión detallada.

Los puntos key para llevar a casa es que el SHA depende de los nombres de file de todos los objects o treees contenidos, sus SHA y sus permissions. Cambia cualquiera de esos y cambias el SHA. Si dos treees tienen los mismos SHA, entonces todos esos componentes deben coincidir (excluyendo la posibilidad de colisiones, ya que están cerca de ser imposibles).

No creo que sea posible tener dos objects de tree que tengan el mismo hash ya que el file de object se llama por el hash en el repository. Además, para que dos objects de tree sean iguales, sería necesario que el estado de la confirmación sea idéntico en ambos casos hasta el contenido de todos los files preparados porque el object de tree conserva las references de SHA-1 a los files preparados.

Esta publicación podría ayudar a aclarar esto.

Espero que esto ayude.