¿Hay algún inconveniente en este flujo de trabajo Mercurial: la cabeza nombrada "muerta" de la rama?
workflow branch (3)
Puede usar hg commit --close-branch
para marcar una rama como cerrada:
http://www.selenic.com/mercurial/hg.1.html#commit
Las ramas cerradas no se mostrarán en las hg branches
o en las hg heads
de forma predeterminada (solo si se especifica la opción -c
/ --closed
), ¿así que no estoy seguro de cómo está viendo el "desorden"?
¿Qué ganarías exactamente fusionando cosas?
Me encanta la flexibilidad de las ramas con nombre, pero tengo algunas preocupaciones sobre la proliferación de las cabezas.
Incluso cuando la rama está cerrada, aún aparece en la cabeza. Tengo una idea de cómo limpiar la salida de "hg heads" Mi pregunta a los gurús: "¿Qué me estoy perdiendo?"
En primer lugar, puede preguntar: ¿Por qué podría querer ocultar por completo la cabeza de una rama nombrada? Por varias razones:
- la característica es una mala idea
- la característica es una buena idea que no está lista para fusionarse para dar propina, pero tal vez en unos pocos meses
- la rama es un lanzamiento de parche a una versión etiquetada anterior
editar: Resulta que la proliferación de cabezas es un síntoma de la versión anterior de Mercurial que estaba usando. Al cerrar la rama, se oculta la cabeza de la rama en las nuevas versiones de Mercurial.
Mi idea es tener una rama de la cabeza "muerta" en la que se fusionarán todas estas cabezas de rama cerradas. La cabeza muerta sería emparentada por el conjunto de cambios 0 y serviría con el único propósito de agrupar las cabezas extraviadas que no son necesarias ahora.
El deadhead solo tiene otros deadhead children, que nunca se fusionan de nuevo en la rama predeterminada.
Parece haber un inconveniente en dejar cabezas muertas, lo que no se resuelve con las versiones posteriores de Mercurial.
Supongamos que tiene muchas cabezas de bifurcación cerradas y solo una sucursal activa no cerrada. Supongamos además que en algún momento posterior se comete una mala comisión (rev bad) en la parte superior de la cabeza no cerrada (rev bueno). Antes de presionar, le gustaría clonar su repositorio descartando esa mala confirmación. Eso suele ser algo simple de hacer:
hg clone --rev good BadRepo FixedRepo
Desafortunadamente, esto no tira de las cabezas de las ramas cerradas ya que no son ancestros de la revolución. Todas las ramas que se cerraron no se cerrarán en el repositorio clonado. Probé esto con Mercurial 2.3.1.
¿Pensamientos?
ps La extensión hgflow cierra la característica y libera las ramas antes de fusionarse. Esto evita el problema de las cabezas cerradas.
En cuanto a que el clon es un enfoque desagradable, me ha funcionado bastante bien y con facilidad. El clon reemplaza el repositorio con el compromiso incorrecto. El clon es un esfuerzo local. Ese depósito malo simplemente se descarta. Normalmente me doy cuenta de que cometí un error poco después.
La opción -b es solo una forma de reformular el --rev utilizando un nombre de rama en lugar de un identificador de conjunto de cambios. El uso de la opción --rev tira de todo el árbol topológico bajo la revisión. Si la revisión es la cabeza de la rama, entonces el clon --rev es el mismo que el clon -b. -b deja el mismo problema que describí con la opción --rev. Las sucursales que estaban cerradas en el repositorio original se vuelven a abrir si se las deja como cabezas.
Si el patrón es para dejar las cabezas cerradas, pronto superarán en número a las cabezas relevantes. Hacer esos cierres en un clon es todo un esfuerzo a menos que hagas un clon completo.
Siento que he enturbiado las aguas con por qué podría hacer un clon parcial. Voy a reiterar mi preocupación sobre las cabezas de cierre con más cuidado.
Para cualquier copia parcial del repositorio X al repositorio Y, si existe una rama B en el repositorio X con una cabeza de cierre y esa rama se incluye en el clon por razones puramente topológicas, entonces la rama B no se cerrará en el repositorio Y. Además si el patrón de fusión es generalmente dejar cabezas de cierre, entonces el número de cabezas de cierre es de tiempo de desarrollo de orden.
Esto me preocupa, así que cierro mis ramas antes de unirme. Yo uso hgflow (http://nvie.com/posts/a-successful-git-branching-model). Un posible clon parcial sería clonar la rama de desarrollo y seguir con un tirón de la rama principal (por ejemplo, si desea eliminar los callejones sin salida). Si las ramas de característica y de liberación se hubieran cerrado después de su fusión final, esas ramas se volverían a abrir en el clon.