tag son que informatica branches mercurial branch dvcs branching-strategy

mercurial - son - svn merge branch to trunk



¿Cómo afectan las ramas cerradas al rendimiento de Mercurial? (2)

Me he dado cuenta de que some answers a las preguntas sobre los nombres de las sucursales citan la wiki de Mercurial para indicar que las convenciones de nomenclatura de ramificación por característica o ramificación por fallo pueden causar problemas de rendimiento. ¿La capacidad de marcar ramas como cerradas con el --close-branch en las confirmaciones tiene algún efecto en esta afirmación de rendimiento?


¿La capacidad de marcar ramas como cerradas con el --close-branch en las confirmaciones tiene algún efecto en esta afirmación de rendimiento?

Marcando una rama cerrada con hg commit --close-branch simplemente crea un nuevo conjunto de cambios con un marcador close=1 en los metadatos del conjunto de cambios. Los comandos como hg branches y hg heads sabrán entonces que no deben mostrarse esta rama / cabeza. Estos comandos usan un caché de rama para acelerar las cosas y esperamos que el caché se amplíe bien con el número de ramas.

Sin embargo, hay algunas operaciones que tienen una complejidad que es lineal en el número de cabezas topológicas . Esto incluye el protocolo de descubrimiento usado antes de la versión 1.9. El nuevo protocolo de descubrimiento en la versión 1.9 todavía intercambiará cabezas topológicas en sus "muestras", pero el tamaño de la muestra está limitado a 200 conjuntos de cambios.

Es posible que haya otras rutas de código que todavía tengan una escala lineal en el número de cabezas y es por eso que sugerimos cerrar antes de fusionar:

$ hg update bug-123 $ hg commit --close-branch -m "All fixed" $ hg update default $ hg merge bug-123

en su lugar, fusionar antes de cerrar:

$ hg update default $ hg merge bug-123 $ hg update bug-123 $ hg commit --close-branch -m "All fixed"

Este último enfoque deja una cabeza colgando en el gráfico (una cabeza topológica).


Una rama cercana probablemente no hará ninguna diferencia en el rendimiento, pero ese no es el punto. Las implicaciones de rendimiento son pequeñas, y ciertamente no es la razón por la que le sugerí que evite los nombres de sucursales permanentes para líneas de desarrollo de corta duración. Aquí está la cita relevante de la wiki:

Mercurial está diseñado para funcionar bien con cientos de sucursales. Todavía funciona bastante bien con diez mil sucursales, pero algunos comandos pueden mostrar una sobrecarga notable que solo verá después de que su flujo de trabajo ya se haya estabilizado.

La razón por la que MG y yo (somos los principales respondedores en las dos preguntas vinculadas) es que una y otra vez observamos a las personas que se enojan cuando descubren que los nombres de las sucursales son permanentes en Mercurial. Aquí está el intercambio habitual, que se manifiesta en el IRC varias veces a la semana:

  • Persona A: "¡Tengo 100 sucursales y quiero deshacerme de ellas!"
  • Persona B: "No puedes. Puedes ocultarlas, pero las ramas de Mercurial son para siempre".
  • R: "¡Pero en git tengo miles de ramas y me deshago de ellas cuando quiera!"
  • B: "Sí, en Mercurial esos se llaman marcadores".

o similarmente:

  • Persona C: "Nombré a una sucursal ''el marketing de características estúpidas me hizo agregar'' y quiero impulsar ese cambio sin presionar el nombre de la sucursal".
  • Persona B: "No puedes. Puedes combinarlo con el valor predeterminado, pero ese nombre es permanente en el conjunto de cambios. ¡Tendrías que recrear el conjunto de cambios para deshacerte de él!"
  • C: "¡Pero en git los nombres de mis sucursales son solo locales!"
  • B: "Sí, en Mercurial esos se llaman marcadores".

Si quiere nombres permanentes para siempre, bifurque en sus cambios (y MG, mi contestador en ambas preguntas es exactamente lo que le gusta), entonces, por supuesto, utilícelos y no se preocupe un poco por el rendimiento. Pero no se preocupe por cómo sus herramientas representan las ramas: como Mercurial, las herramientas se construyen generalmente para escalar la cantidad de conjuntos de cambios, no la cantidad de ramas. Por lo tanto, a menudo hacen cosas ingenuas como colocar todos los nombres de las sucursales en un solo menú desplegable. Este problema de la GUI se solucionará cuando las ramas nombradas se vuelvan más populares.

La excelente Guía de Steve Losh para bifurcar en Mercurial hace un gran trabajo explicando sus (¡cuatro!) Opciones. Elija lo que le guste y confíe en que hay muchas personas a las que les gusta la que seleccionó, y al menos algunas de ellas tienen más sucursales de las que usted tendrá.