tnm - ¿Qué es la estadificación de git y por qué Hg*ostensiblemente*no lo admite?
tnm cancer mama (2)
Los documentos Hg indican que hg
no admite un equivalente al índice de git fuera de la caja y sugiere usar extensiones (registro o mq) para un comportamiento similar.
Primero, tengo muy poca experiencia de campo con git
, así que permítanme expresar mi comprensión del concepto de puesta en escena en git:
- Está la copia de trabajo, que contiene una serie de archivos modificados, cada uno con una cantidad de fragmentos modificados.
- Luego, el usuario (tal vez repetidamente) utiliza
git add
para seleccionar qué archivos se confirmarán. - Alternativamente, use
git add -p
para seleccionar solo algunos de los trozos en un archivo para luego confirmarlos. - Haga un
git commit
para agregar los cambios seleccionados previamente al repositorio.
Entonces, para mí, toda el staging area
es un nombre pomposo para una selección de cuáles de los cambios en la copia de trabajo lo harán en la próxima confirmación.
Si no estoy completamente fuera de eso, entonces, ¿por qué todos, incluida la documentación oficial, afirman que Mercurial no admite esto?
Lo pregunto, porque el flujo de trabajo exacto anterior es trivial en TortoiseHg:
- en el panel izquierdo - seleccione archivos enteros para incluir en la confirmación
- en el panel inferior derecho - seleccione partes individuales para incluir
- pulsa ''Commit''.
No sé qué comandos de hg
usa TortoiseHg, pero nuevamente, nunca tuve que preocuparme . (No hace uso de ninguna extensión para este AFAICT)
¿Hay más en el concepto git
de puesta en escena que me estoy perdiendo?
Git diseñado para admitir cierto tipo de flujo de trabajo durante el desarrollo del kernel de Linux. Por cierto tipo de personas por cierto tipo de personas.
No está diseñado para ser fácil de usar por un desarrollador ordinario (¡compárelo con hg
!), Pero gana gran popularidad y estatus cultural debido a su costo, rendimiento, soporte de grandes compañías y campaña publicitaria (GitHub aquí).
Hoy en día, los desarrolladores ordinarios interactúan con Git a través de IDE GUI y no necesitan saber sobre el área de índice / escenario . Solo usa casillas de verificación como en la captura de pantalla del usuario (por lo que no hay diferencia entre el uso de Git / Mercurial para un desarrollador normal).
Para las personas que trabajan con la línea de comandos, la sintaxis CLI irregular de Git y la exposición de detalles de formatos de almacenamiento innecesarios hacen que la línea de aprendizaje sea más larga en comparación con el tiempo para convertirse en asistente de Mercurial.
Aquí hay buenas imágenes que describen el uso del índice:
- https://marklodato.github.io/visual-git-guide/index-en.html
- http://git-scm.com/blog/2011/07/11/reset.html
Siempre puedes emular el índice por (pero ¿por qué?):
hg qinit
hg qadd
hg qrefesh
hg qfinish
¡excepto MQ le permite tener un conjunto ordenado de Índices, no solo uno! Y le permite dar nombre a cada "Índice".
Con la extensión de record
, tiene la opción de seleccionar fragmentos de parches en la CLI, como usted record
casillas de verificación en la GUI. Esa extensión es respuesta directa a la opción Git -p
.
Por lo tanto, el iniciador de temas tiene razón al completar que el Índice es una característica innecesaria de la arquitectura DVCS, y está integrado en Git para admitir la voluntad de algunos desarrolladores de Git Core.
Buena suerte y feliz piratería!
ACTUALIZACIÓN Cotización de http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
La mayor parte del poder de Git se dirige directamente a los mantenedores de bases de código: personas que tienen que fusionar contribuciones de un gran número de fuentes diferentes, o que tienen que garantizar una serie de esfuerzos de desarrollo paralelos para obtener una versión única, coherente y estable. Esto es bueno. Pero la mayoría de los usuarios de Git no se encuentran en esta situación: simplemente escriben código, a menudo en una sola sucursal durante meses a la vez. Git es una máquina de café espresso de 4 manijas y doble caldera, cuando todo lo que necesitan es instantáneo.
Los registros del área de preparación (índice) cambian las instantáneas , no solo una selección de archivos. Por ejemplo, puede modificar el archivo A para agregar foo
, el archivo de etapa A, y luego volver a modificar el archivo A para agregar la bar
. Si no vuelve a crear la etapa del archivo A, entonces, cuando realice la confirmación, solo se confirmará foo
, porque el índice tiene la instantánea de A cuando se preparó.
También puede revertir un archivo al estado de la última instantánea del índice (mediante git checkout
). Esencialmente, el índice actúa como un "compromiso temporal" que es fácil de modificar antes de ser promovido a un compromiso completo.
Dado que el índice es persistente, si llega a la mitad del proceso de preparación, decida que necesita hacer otro cambio, no hay problema, simplemente haga el cambio y luego prepare la nueva versión. No es necesario volver a poner en escena todas las otras cosas que ya has puesto en escena.
¿Ha borrado accidentalmente un archivo antes de cometerlo? Si ya lo has puesto en escena, no te preocupes, solo echa un vistazo a la versión en escena.