tag drop delete create git mercurial mercurial-queue

drop - git equivalente a hg mq?



git tag atlassian (4)

Empecé a usar Git junto a Mercurial para familiarizarme con Git.

Uso extensivamente la extensión mq en Mercurial para administrar parches locales, y estoy buscando un equivalente de Git.

¿Debo simplemente usar la rama de Git? ¿O hay mejores formas de administrar parches locales que permitan aplicar y eliminar fácilmente los parches?

Gracias,


Consulte la sección "Capas de interfaz de administración de parches" de la página Interfaces, interfaces y herramientas en Wiki de Git. Se enumeran dos interfaces de administración de parches, aproximadamente equivalentes a la extensión ''mq'' de Mercurials:

  • StGIT (Stacked Git), el más antiguo de los dos, escrito en Python, usa dos instantáneas para representar el parche
  • Guilt (anteriormente ''gq''), escrito como series de scripts bash, archivo de serie y los parches (uno por archivo) se almacenan como archivos de texto sin formato.
  • pg (Patchy Git) está en desuso , y ya no se mantiene.

Pero si no necesita un uso más avanzado, puede usar " git rebase --interactive " para reordenar, aplastar y dividir parches. Y para administrar su sucursal contra la versión actual de upstream, "git rebase" generalmente sería suficiente.


Descargo de responsabilidad: No soy un usuario de hg, así que he leído sobre hg pero no tengo mucha experiencia de primera mano al usarlo.

git ofrece varias herramientas muy potentes y flexibles para gestionar las ramas en un estilo de "parche de cola", por lo que para muchos casos de uso básicos (e incluso algunos bastante complejos), el git nativo es lo suficientemente potente.

Por lo general, la mayoría de los proyectos mantienen una rama principal estable central que solo gana nuevas confirmaciones y nunca se "rebobina", por lo que las confirmaciones en la rama maestra son fijas.

Además de esto, un mantenedor (o un desarrollador) puede mantener una o más ramas fluidas de parches de trabajo en progreso (es decir, confirmaciones) que se basan en la rama estable.

Las actividades típicas de administración de parches incluyen:

rebase la fila de parches en la última rama estable - use git rebase ,

duplicar la cola de parches en una antigua rama de maintentance - use git branch y git rebase ,

reordenando parches en la cola - use git rebase --interactive (también conocido como git rebase -i ) usando un editor de texto para reordenar la cola.

parches de git rebase -i : use git rebase -i con la directiva de squash

Alterar parches o parchar los mensajes de confirmación: use git rebase -i (¿detectar un tema?) con la directiva de edición.

Cualquier actividad que altere un parche de alguna manera (es decir, su contenido, descripción o paternidad) creará un nuevo compromiso con una nueva identificación de compromiso para ese parche. El hecho de que los antiguos commits puedan ser descartados y reemplazados regularmente antes de ser promovidos a la rama principal estable es lo único que los convierte en una "cola de parches" en lugar de una sucursal, pero esta es una convención de proyecto más que cualquier diferencia física en los datos que componen los commits. Para git son objetos idénticos.

Para promover un parche a una confirmación "real", simplemente mueva el parche al principio de la cola y combínelo con la rama principal. Después de mover el parche al principio de la cola, es lo mismo que una confirmación normal basada en la rama maestra, por lo que al fusionarlo solo se avanza rápidamente el puntero de la rama maestra para apuntar a la confirmación del parche.

Publicar este compromiso como un parche maestro "estable" es el acto que dice: ahora es un compromiso que no cambiará y es parte de la historia inmutable del proyecto.


Git realmente no proporciona esta función en sí misma. Dependiendo de tus usos, es posible que puedas arreglártelas con "git stash" y / o sucursales, pero será bastante básico. Si las personas tienen necesidades de administración de parches más avanzadas con git, parecen recurrir a Quilt o StGit: ver http://git.or.cz/gitwiki/PatchManagement


Simplemente use una rama y vuelva a clasificarla contra su rama ascendente con regularidad. Esto es más fácil de administrar y más seguro que usar mq (al cual he perdido datos en el pasado).