tag example crear git version-control

example - git push



¿Cuál es la diferencia entre HEAD, árbol de trabajo e índice en Git? (4)

Arbol de trabajo

Su árbol de trabajo son los archivos en los que está trabajando actualmente.

Índice de git

  • El "índice" de git es donde colocas los archivos que deseas que se confirmen en el repositorio de git.

  • El índice también se conoce como caché , caché de directorio , caché de directorio actual , área de preparación , archivos almacenados .

  • Antes de "confirmar" (registrar) los archivos en el repositorio de git, primero debe colocar los archivos en el "índice" de git.

  • El índice no es el directorio de trabajo: puede escribir un comando como git status y git le dirá qué archivos de su directorio de trabajo se agregaron al índice de git (por ejemplo, mediante el comando git add filename ).

  • El índice no es el repositorio de git: los archivos en el índice de git son archivos que git se comprometería con el repositorio de git si usara el comando git commit.

¿Puede alguien decirme la diferencia entre HEAD, árbol de trabajo e índice en Git?

Por lo que entiendo, son todos nombres para diferentes ramas. ¿Mi suposición es correcta?

Editar

encontré esto

Un solo repositorio de git puede rastrear un número arbitrario de sucursales, pero su árbol de trabajo está asociado con solo una de ellas (la rama "actual" o "desprotegida"), y HEAD apunta a esa rama.

¿Significa esto que HEAD y el árbol de trabajo son siempre lo mismo?


Algunas otras buenas referencias sobre esos temas:

Yo uso el índice como punto de control .

Cuando estoy a punto de hacer un cambio que puede ir mal, cuando quiero explorar una dirección en la que no estoy seguro si puedo seguir adelante o incluso si es una buena idea, como una refactorización o cambio de concepto conceptualmente exigentes. Tipo de representación: controlo mi trabajo en el índice. Si este es el primer cambio que he realizado desde mi último compromiso, entonces puedo usar el repositorio local como un punto de control, pero a menudo tengo un cambio conceptual que estoy implementando como un conjunto de pequeños pasos. Quiero un punto de control después de cada paso, pero guarde el compromiso hasta que vuelva al código de trabajo probado.

Notas:

  1. el espacio de trabajo es el árbol de directorios de los archivos (de origen) que ve y edita.

  2. El índice es un archivo binario único y grande en <baseOfRepo>/.git/index , que enumera todos los archivos en la rama actual, sus sumas de comprobación sha1 , las marcas de tiempo y el nombre del archivo; no es otro directorio con una copia de archivos en el mismo.

  3. El repositorio local es un directorio oculto ( .git ) que incluye un directorio de objects contiene todas las versiones de cada archivo en el repositorio (sucursales locales y copias de sucursales remotas) como un archivo "blob" comprimido.

No piense en los cuatro ''discos'' representados en la imagen de arriba como copias separadas de los archivos repo.

Básicamente son referencias nombradas para las confirmaciones Git. Hay dos tipos principales de referencias: etiquetas y cabezas.

  • Las etiquetas son referencias fijas que marcan un punto específico en la historia, por ejemplo v2.6.29.
  • Por el contrario, los jefes siempre se mueven para reflejar la posición actual del desarrollo del proyecto.

(nota: como lo commented Timo Huovinen , esas flechas no son lo que apuntan las confirmaciones, es el orden del flujo de trabajo , básicamente muestran flechas como 1 -> 2 -> 3 -> 4 donde 1 es la primera confirmación y 4 es la última)

Ahora sabemos lo que está pasando en el proyecto.
Pero para saber qué está sucediendo aquí, en este momento hay una referencia especial llamada HEAD. Sirve dos propósitos principales:

  • le indica a Git qué compromiso debe tomar los archivos de cuando realiza el proceso de pago, y
  • le dice a Git dónde poner nuevos compromisos cuando te comprometes.

Cuando ejecuta git checkout ref , señala HEAD a la referencia que ha designado y extrae los archivos de ella. Cuando ejecutas git commit , crea un nuevo objeto commit, que se convierte en un hijo de HEAD actual. Normalmente, HEAD apunta a una de las cabezas, por lo que todo funciona bien.


La diferencia entre HEAD (rama actual o último estado confirmado en la rama actual), índice (también conocido como área de preparación) y árbol de trabajo (el estado de los archivos en proceso de pago) se describe en la sección "Los tres estados" de la sección "1.3 Conceptos básicos de Git " capítulo del libro Pro Git por Scott Chacon (licencia Creative Commons).

Aquí está la imagen que lo ilustra de este capítulo:

En la imagen anterior, "directorio de trabajo" es lo mismo que "árbol de trabajo", el "área de preparación" es un nombre alternativo para git "índice", y HEAD apunta a la rama actualmente seleccionada, la cual apunta a la última confirmación en " directorio git (repositorio) "

Tenga en cuenta que git commit -a efectuaría cambios y confirmaría en un solo paso.


Su árbol de trabajo es lo que realmente está en los archivos en los que está trabajando actualmente. HEAD es un puntero a la rama o confirmación que se desprendió por última vez, y que será el padre de una nueva confirmación si la realiza. Por ejemplo, si está en la rama master , HEAD apuntará a master , y cuando confirme, ese nuevo commit será un descendiente de la revisión a la que apuntó master , y master se actualizará para apuntar al nuevo commit .

El índice es un área de preparación donde se prepara el nuevo compromiso. Esencialmente, el contenido del índice es lo que entrará en el nuevo compromiso (aunque si lo hace git commit -a , esto agregará automáticamente todos los cambios a los archivos que Git conoce en el índice antes de confirmar), por lo que confirmará el contenido actual de tu arbol de trabajo). git add agregará o actualizará los archivos del árbol de trabajo en su índice.