¿Cuál es la diferencia entre un tree y un directory?

Soy un principiante git tratando de orderar los conceptos y términos. El giton git dice que un tree es equivalente a un directory y que un directory es lo que obtienes con ls. ¿Son términos intercambiables? ¿O son "tree" y "directory" para usar en diferentes contexts o para referirse a cosas separadas (aunque relacionadas)?

La respuesta corta: sí, un tree es un directory y un directory es un tree.

La respuesta larga: un tree es un object que contiene una list de blobs, los nombres para adjuntar a los blobs y otros treees y los nombres para adjuntar a ellos. http://book.git-scm.com/1_the_git_object_model.html tiene una explicación bastante buena de los diferentes types de objects en el model de git; ¡Sugeriría leerlo!

En la terminología de Git, un "tree" es una estructura jerárquica de files y directorys. Esto es (a propósito) muy similar a un directory en un sistema de files.

Un object de commit de Git contiene una reference a un object de tree, que es el estado de todos los files en el momento de esa confirmación.

  • El model de objects Git
  • Todos los types de objects de Git: Blob, Tree, Commit And Tag

Para decirlo simplemente, el "tree" se refiere a la instantánea de todo el estado del repository en ese momento (como lo que tienes para tu código actual [que también se conoce como HEAD], del repository cuando se comtesting actualmente se realizó commit, etc.)

El directory solo se refiere a un directory del sistema de files.