Inconsistencia entre el directory de trabajo y el tree de trabajo

He estado leyendo la documentation de git por un time y me he dado count de que en muchos commands la documentation es ambigua cuando se trata de la diferencia entre "directory de trabajo" y "tree de trabajo". Estoy al tanto de los cambios en el estado aquí y los commands utilizados con mayor frecuencia como add también son consistentes. Pero un grep en la documentation de una extracción que hice ayer, muestra que muchos commands todavía no se actualizan en consecuencia.

Esto me lleva al próximo punto, entonces, ¿cuál es la definición precisa de cada concepto, ya que parece que se usan indistintamente en la documentation de configuration y ocultación? ¿El directory de trabajo es solo un error obsoleto que está esperando ser reparado?

¿Se realizó el cambio de estado anterior para resolver la confusión y denotar que el estado es único por tree de trabajo dada su CABEZA?

Si este es el caso, entonces ¿es el tree único de trabajo de gc también, o está hecho en la "database" como fsck? La misma idea con alijo, ¿le importa qué tree de trabajo se llamaba?

En los sistemas de control de versiones en general (no solo en Git), uno siempre debe tener un lugar para trabajar. El nombre utilizado para este lugar varía: tree de trabajo, tree de trabajo, directory de trabajo, etc. En general, work-tree o working-tree o alguna variante es probablemente la mejor ya que "work directory" parece implicar un solo nivel de "directory-ness" ".

Los nombres de Git siempre han sido un poco inconsistentes, pero el movimiento para usar "tree de trabajo" o "tree de trabajo" ha sido bastante constante. Históricamente, esto se volvió más importante cuando el sub-command git worktree entró en Git oficialmente, en la versión 2.5 de Git.

Entonces, específicamente:

¿Funciona [la frase] en el directory de trabajo [en la documentation de git stash ] solo un error desactualizado que está esperando ser reparado?

Yo diría que sí.

¿Se realizó el cambio de estado anterior para resolver la confusión y denotar que el estado es único por tree de trabajo dada su CABEZA?

Sí. Sin embargo, git status que el git status computa dinámicamente el estado, basándose en tres elementos: HEAD (hay un HEAD por tree de trabajo), el índice (hay un índice por tree de trabajo) y el tree de trabajo.

(Confusamente, cualquier command puede establecer su propio índice temporal y usarlo. El único índice por tree de trabajo es el único índice "real" para ese tree de trabajo, aparte de cualquier índice temporal creado temporalmente por algún command y configurado en $GIT_INDEX_FILE .)

Si este es el caso, entonces ¿es el tree único de trabajo de gc también, o está hecho en la "database" como fsck?

git gc funciona en la database. Sin embargo, debido a que elimina objects no referencedos, es un caso particularmente complicado: debe mirar cada índice y cada HEAD (posiblemente separado), lo que significa que debe iterar sobre todos los treees de trabajo.

La misma idea con alijo, ¿le importa qué tree de trabajo se llamaba?

Lo que hace git stash es hacer dos, o a veces tres, confirmaciones. Los hace del índice y del tree de trabajo, por lo que importa en qué tree de trabajo se encuentre. (El tercer compromiso, si está presente, contiene files sin seguimiento: sin seguimiento pero no ignorado, o sin seguimiento, incluido el ignorado. Estos también provienen del tree de trabajo actual).

Los commits mismos no van a ninguna twig. En cambio, de forma pnetworkingeterminada, uno de los commits (el que ubica a los demás) se almacena en refs/stash , usando su reflog para retener cualquier valor anterior de refs/stash .