Administrar código en Mercurial: cómo revertir files individuales, "labelrlo" y ser capaz de mantenerlo

Actualización: Terminamos usando un process muy parecido a este esquema (gracias a neuro para el enlace). Damos masajes a nuestro repository en un estado en el que el valor pnetworkingeterminado es estable (y tiene el mismo código que nuestro entorno de producción), tenemos una twig de desarrollo, twigs de características nuevas y twigs de lanzamiento para lanzamientos. Todo parece estar funcionando perfectamente.

Trasbackground

Nuestro equipo ha cambiado recientemente el uso de SVN (utilizando el cliente de Windows ToroiseSVN) a Mercurial (utilizando el cliente de Windows TortoiseHg) para el control de la versión. Hemos exportado con éxito nuestro repository SVN y lo hemos importado a un repository de Mercurial.

Ahora tenemos un repository de Mercurial donde podemos ver toda la historia de las revisiones (sets de cambios en Mercurial).

Cómo lo hicimos en los viejos times

La vida era más simple en los viejos times; nuestro process de desarrollo no fue realmente multi-stream como lo es ahora. El tronco se usó para save todo el código, incluso los cambios que aún estaban en vuelo (siempre que no rompieran el tronco ). Cuando se trataba de administrar lanzamientos con SVN, nos fijábamos en el tronco (que contiene todo el código), revertimos los cambios individuales que no queríamos como parte del lanzamiento y creamos una label para él.

Cherrypicking el código que queremos con SVN fue fácil. Las versiones anteriores de corrección de errores y la garantía de que era parte del tronco también eran simples.

Qué estamos haciendo ahora

En Mercurial, necesitamos poder get una instantánea del "tronco" (por defecto en Mercurial) con cambios individuales revertidos. Podemos hacer esto usando hg revertir .

Para hacer una instantánea de esto, hemos creado una "twig con nombre", llamémosla Build-4.0.1 por ahora.

Donde surge el desafío

El desarrollo continúa de forma pnetworkingeterminada como normal cuando se encuentra un error en Build-4.0.1 . Supongamos que el error está en uno de los files revertidos. Cambiamos el código de la twig para Build-4.0.1 , creamos una nueva "twig con nombre" ( Build-4.0.2 ) y queremos fusionarla de nuevo en modo pnetworkingeterminado sin presionar el código revertido sobre el código más nuevo. ¿Cómo podemos lograr esto?

Alternativamente, ¿hay un mejor flujo de trabajo para administrar las versiones y nuestro código en Mercurial? Me gusta bastante el aspecto de esta maravillosa respuesta de SO sobre la administración de las twigs de publicación , aunque no estoy seguro de cómo podemos hacer la transición desde el estado en el que nos encontramos ahora (con material en vuelo por defecto ).

Nota: he consultado la extensión de trasplante , pero aún no la he utilizado, ¿podría ser parte de la solución a este desafío?

Bueno, para empezar, tu uso de revertir me parece extraño. Por lo general, se utiliza para revertir las modificaciones realizadas en la copy de trabajo a la versión del repository.

La forma habitual de hacer retroceder la copy de trabajo es actualizar:

hg update -r 1234 

a partir de ahí, puede labelr, modificar, confirmar, etc.

Para volver a fusionar, solo debe fusionar su twig de publicación con la twig pnetworkingeterminada. Funcionará como un amuleto, a less que sea un lanzamiento diferente / viejo.

El trasplante funciona bien, pero haga algo un poco diferente de la fusión: toma su set de cambios como un "diff" y lo aplica como una nueva modificación.

Para administrar sus lanzamientos, puede mirar esta otra respuesta (por mí):

¿Cómo usar mercurial para la gestión de lanzamientos?

Lo que usamos es una copy / twig principal que contiene la versión más estable, que se lanza en algunos puntos. En este clon: branch, podemos corregir errores críticos (hotfix). Paralelamente, usamos un dev clone / branch para desarrollar. Las revisiones se fusionan tan pronto como se completa desde estable a dev. Cuando finaliza el desarrollo actual, fusionamos el desarrollo en estable / pnetworkingeterminado.

Este esquema es bastante bueno para entender las cosas 🙂

Buena suerte !

Revisar todos los cambios y eliminar los que no desea no es una forma común de crear un lanzamiento, por decirlo suavemente. La sección de Patrones de ramificación comunes en el libro de SVN sugiere algunos flujos de trabajo más populares:

  • liberar twigs : crear una twig de liberación desde el tronco inestable, arreglar errores para estabilizarlo, recoger las correcciones de errores entre ellos mientras la twig está en modo de mantenimiento.
  • twigs de características : mantenga el tronco estable y listo para ser liberado mediante la fusión en las twigs de características que desee

El segundo es probablemente el más adecuado aquí, porque le brinda un lugar para realizar cambios experimentales o arriesgados hasta que se sienta seguro de ellos: estos son los cambios que habría revertido antes de un lanzamiento en su antiguo flujo de trabajo.

Ambos patrones de ramificación deberían pasar de mercurio a bueno. En caso de que vaya al primer enfoque, tenga en count que mercurial (desde 2.0) ahora tiene un command de injerto , ya no necesita la extensión de trasplante.