¿Qué significa 'etapa' en git?

318

Me resulta difícil entender a Git, ya que no pude encontrar el significado de las palabras utilizadas para las acciones. He revisado el diccionario para ver el significado de 'etapa' y ninguno de los significados estaba relacionado con los conceptos de control de fuente.

¿Qué significa 'etapa' en el contexto de git?

000
fuente
12
Git tiene su propio vocabulario. Y dado que cada instrucción está formulada en un vocabulario especial, es difícil comenzar. "Etapa" es hacer git add file.extpara un archivo específico, o git add .afectar a todos los archivos modificados y no rastreados. Se dice que los archivos que se han agregado de esta manera están "organizados" y se incluirán en el próximo "commit". El commit es una instantánea de su trabajo creado, por ejemplo, con git commit -m "I wrote something".
Jonatan Öström
11
Git es difícil de entender porque no hay un tutorial conceptual por ahí. Todos pasan por detalles innecesarios.
Xaqron
2
¿Querías eliminar la etiqueta "terminología" de esta pregunta? Parece una etiqueta perfectamente válida para mí.
Philip Kendall el
Por alguna razón, la mejor manera de entender la importancia de la puesta en escena es a partir de esta respuesta en Quora: qr.ae/TbSK2I
Lamar

Respuestas:

310

Para organizar un archivo es simplemente para prepararlo finamente para una confirmación. Git, con su índice, le permite confirmar solo ciertas partes de los cambios que ha realizado desde la última confirmación. Supongamos que está trabajando en dos funciones: una está terminada y otra aún necesita trabajo. Te gustaría hacer una confirmación e ir a casa (¡las 5 en punto, finalmente!) Pero no te gustaría confirmar las partes de la segunda función, que aún no se ha hecho. Escenifica las partes que sabes que pertenecen a la primera característica y confirma. Ahora su commit es su proyecto con la primera característica realizada, mientras que la segunda aún está en progreso en su directorio de trabajo.

Torre
fuente
55
Buena explicación. Tenga en cuenta que git, al distribuirse, obviamente le permite confirmar ambas características, ya que las confirmaciones son locales (al principio). Aún así, es posible que desee dividir las modificaciones en una confirmación por función, y nuevamente la puesta en escena es útil.
sleske
77
No entiendo por qué necesitas una puesta en escena para esto. Puedo hacer esto con HG o incluso SVN solo confirmando los archivos relevantes. Parece que esta característica está diseñada principalmente para ayudar a las personas que insisten en trabajar con la línea de comando donde es más difícil marcar las casillas de lo que está cometiendo.
jiggy
78
@jiggy git te permite organizar parte de un archivo. También puede organizar un archivo, realizar más modificaciones y luego confirmar el estado en que estaba en la puesta en escena. No puedes hacer eso en subversion.
Izkata
44
@jiggy En SVN, hay algo, entre el momento en que selecciona qué archivos / partes de archivos para confirmar y cuando termina de escribir su mensaje de confirmación, que registra qué archivos / partes seleccionó para confirmar. Puede que nunca se mencione explícitamente, puede implementarse en el cliente SVN en lugar de una parte real del repositorio, puede que solo sean algunos indicadores en la memoria, pero esa es la etapa de SVN. No he mirado a HG, pero sospecho que hace lo mismo. La diferencia con git es que git reconoce que es una cosa, lo graba en el disco y permite que el usuario lo acceda directamente.
8bittree
77
La segunda flecha "archivos de etapa" en la figura puede ser engañosa. los "trozos de escenario" podrían ser más precisos
Ida
137

Como hasta ahora todos lo han respondido de manera "formal", permítanme hacer esto con alternativas para mejorar el aprendizaje con el poder de las metáforas.

Entonces el área de preparación es como:

  • un caché de archivos que desea confirmar
  • no una serie de tubos, sino un camión volquete, listo para mover el trabajo con el que lo carga al depósito
  • un lugar mágico donde los archivos seleccionados se convertirán en piedra con su hechicería y se pueden transportar mágicamente al repositorio a su antojo
  • el camino de ladrillos amarillos para que los archivos vayan felices al repositorio (o se caigan si quieres revertirlos)
  • El lugar ficticio en el puerto marítimo donde los archivos se reciben un par de zapatos de cemento y luego se arrojan al mar del repositorio
  • en el mostrador de recepción de la biblioteca, coloca los archivos allí para que el bibliotecario se prepare para archivar en la biblioteca
  • una caja donde colocas cosas antes de meterla debajo de tu cama, donde tu cama es un depósito de cajas que previamente has metido
  • la bahía de carga de archivos antes de que entre en el almacén del repositorio con el cargador de energía
  • el filtro de una cafetera eléctrica por goteo, si los archivos son como el café en polvo, entonces los archivos comprometidos son el café preparado
  • la oficina de Scrooge McDuck al lado de la bóveda, los archivos son como las monedas antes de que entren en la bóveda de su enorme Money Bin
  • la tienda de mascotas, una vez que traes una mascota a casa estás comprometido

Es mágico !

Spoike
fuente
Ama las analogías; camino a seguir amigo ^ _ ^
Musa Al-hassy
Me encanta la analogía final.
meTchaikovsky
35

La puesta en escena es un paso antes del proceso de confirmación en git. Es decir, un commit en git se realiza en dos pasos: puesta en escena y commit real.

Mientras un conjunto de cambios esté en el área de preparación, git le permite editarlo a su gusto (reemplace los archivos almacenados con otras versiones de los archivos almacenados, elimine los cambios de la preparación, etc.).

Tiempo de metáfora rota:

Considere un escenario en el que llame a los motores para obtener sus cosas de su antiguo departamento a su nuevo departamento. Antes de hacer eso, revisará sus cosas, decidirá qué lleva consigo y qué tira, lo empacará en bolsas y lo dejará en el pasillo principal. Los motores simplemente vienen, sacan las bolsas (ya empacadas) del pasillo y las transportan. En este ejemplo, todo hasta que los motores obtengan sus cosas, se está organizando: usted decide qué va a dónde, cómo empacarlo, etc. de puesta en escena).

Desde un punto de vista técnico, la puesta en escena también admite confirmaciones transaccionales, al dividir todas las operaciones en lo que puede fallar (puesta en escena) y lo que no puede fallar (confirmación):

El commit en git se implementa transaccionalmente, después de que la puesta en escena es exitosa. Varios pasos en la puesta en escena pueden fallar (por ejemplo, necesita confirmar, pero su HDD está 99.9999% lleno, y git no tiene espacio para realizar una confirmación). Esto fallará en la preparación (su depósito no será dañado por una confirmación parcial) y el proceso de preparación no afecta su historial de confirmación (no corrompe su depósito en caso de error).

utnapistim
fuente
... y tan pocos votos hasta ahora.
ojonugwa ochalifu
26

Preparar un archivo es prepararlo para una confirmación. Debido a que git expone esta acción al control de los usuarios, le permite crear confirmaciones parciales o modificar un archivo, organizarlo, modificarlo nuevamente y solo confirmar o volver a la modificación original.

La estadificación le permite un control más preciso sobre exactamente cómo desea abordar el control de versiones.

Josh K
fuente
19

Para agregar a las otras excelentes respuestas, aquí es de donde viene el nombre de "etapa":

Revisé el diccionario para ver el significado de etapa y ninguno de los significados estaba relacionado con los conceptos de control de fuente.

En inglés, "representar" puede significar

organizar y participar en (un evento público): los partidarios de UDF organizaron una manifestación en Sofía

(de http://oxforddictionaries.com/definition/stage )

El nombre "puesta en escena" para la característica git deriva de este significado: Al poner en escena, está preparando y organizando una confirmación. Por supuesto, un commit no es lo mismo que una actuación, pero es un evento importante en un VCS :-).

sleske
fuente
3
Pensé que coincidía más estrechamente con el uso en la etapa
inútil el
Ídem. Además, "un punto, período o paso en un proceso o desarrollo".
Darien
Además, "servidor provisional" es un término bastante común utilizado para describir un servidor que se encuentra entre el desarrollo y la producción.
Eternal21
4

Con la mayoría de los otros sistemas de control de versiones, hay 2 lugares para almacenar datos: su copia de trabajo (las carpetas / archivos que está utilizando actualmente) y el almacén de datos (donde el control de versiones decide cómo empacar y almacenar sus cambios). En Git hay una tercera opción: el área de preparación (o índice). Básicamente es un muelle de carga donde puedes determinar qué cambios se envían lejos.

fuente: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Mostafiz Rahman
fuente
1
Esto no parece agregar nada sustancial sobre las 6 respuestas anteriores
mosquito
Menciona Index. Y referencias a un artículo muy completo. Votación a favor. Por cierto, algunas respuestas anteriores son meramente bromas.
Gangnus
1

La "etapa" es un paso intermedio técnicamente necesario en el proceso de registrar un archivo, es decir, recopilar los cambios que se agregarán al repositorio. Los autores de Git decidieron hacer este paso visible y persistente donde otros VCS lo hacen una parte transitoria del proceso de confirmación. Entonces, es solo una opción que git te da porque puede, ¿por qué no?

A mi modo de ver, lo principal que el "escenario" de git te da que otros VCS no tienen es que puedes usarlo para revisar un archivo. Es efectivamente un compromiso local sin nombre y sin comentarios que le da un paso intermedio entre terminar con todo su trabajo y comprometerlo en el repositorio permanentemente y no tener nada guardado en su repositorio local.

Por ejemplo, supongamos que tiene una función parcialmente terminada. Está en un estado estable, pasa todas las pruebas y podría entrar en producción, pero tiene más trabajo por hacer. Puede organizar todos sus cambios y luego continuar trabajando en la función.

Más tarde, tendrá la opción de simplemente confirmar lo que organizó (y enviar esa confirmación al repositorio remoto) o agregar sus nuevos cambios a su área de preparación y luego confirmar todo de una vez, o deshacer solo sus nuevos cambios y revierta su directorio de trabajo al estado en que estaba cuando organizó sus cambios.

Es completamente posible omitir prácticamente el área de preparación por completo y simplemente usar la -aopción git commitsi no encuentra el área de preparación un concepto útil. Mucha gente se salta la puesta en escena y las herramientas GUI generalmente también permiten esto.

Viejo pro
fuente
"otros VCS no" , ¿qué te hace pensar eso? Estanterías en Perforce parece estar haciendo lo que usted describe, e incluso con algunas campanas y silbatos adicionales
mosquito
1
@gnat sí, por supuesto, muchos otros VCS te dan algo así como puesta en escena. Por "otro VCS" me refiero a otros VCS que no tienen algo como el escenario de git, ya que a eso se refería el OP.
Old Pro
Encontré que esta respuesta es inmensamente mejor que todas las anteriores, ya que es la única que aclara por qué existe la Estadificación (que es técnicamente necesaria ), una explicación de su origen ( los autores de Git decidieron hacer este paso visible y persistente ), agregando lo que personalmente considero que es una buena definición para él ( un compromiso local intermedio, sin nombre y sin comentar ). Sin embargo, creo que podría mejorarse citando una fuente para la declaración sobre el origen de la Estadificación, y elaborar un poco más sobre por qué es técnicamente necesario . @OldPro
alexlomba87
-1

Según tengo entendido, supongo que estoy desarrollando una función de inicio de sesión y necesito 5 pasos consecutivos para completar. Así que aquí la puesta en escena lo ayudará a trabajar en pasos como los que se
realizan con el paso 1.
hecho con el paso 2, ahora el paso 1 y el paso 2 son dos etapas correctas.
lío con el paso 3 sin problemas, verifique el último paso por etapas que es el paso 2 de la
misma manera una vez que haya terminado con los 5 pasos, lo que significa que la función está completa ahora realice la confirmación.

palash140
fuente
Esto no parece agregar nada sustancial sobre los puntos hechos y explicados en las respuestas anteriores 9
mosquito
Sí, tienes razón, solo traté de hacer la explicación simple y dulce
palash140
Y lo que siento por usar este concepto prácticamente lo intenté explicar
palash140
considere echar un vistazo a la discusión aquí: ¿son aceptables las segundas respuestas TL; DR? (FWIW en comparación con las respuestas anteriores, esta no me parece simple ni dulce)
mosquito
gracias señor, tengo una pregunta que hacer. He encontrado muchas respuestas y la mayoría de ellas son demasiado complejas, sí, son correctas pero difíciles de digerir a la vez, creo que si no puede explicar nada de manera simple, entonces no lo ha aprendido correctamente o no sabe cómo para usarlo Entonces, ¿es malo poner un resumen o una forma simple de responder?
palash140