2012-02-07 19 views

Respuesta

26

¿La posibilidad de marcar ramas como cerrado con la bandera de --close-branch compromete tienen efecto alguno en este reclamo rendimiento?

Marcado de una rama se cerró con hg commit --close-branch se limita a crear 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 se muestra esta rama/cabecera. Estos comandos usan una memoria caché de rama para acelerar las cosas y esperamos que la memoria caché se adapte 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 utilizado antes de la versión 1.9. El nuevo protocolo de descubrimiento en la versión 1.9 aún intercambiará encabezados topológicos en sus "muestras", pero el tamaño de muestra tiene un límite de 200 conjuntos de cambios.

Puede haber otras rutas de código que todavía se escala linealmente en el número de cabezas y esto es por ello que recomendamos de cerca antes de combinación:

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

lugar fusionar-antes-cierre:

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

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

+0

Impresionante. ¿Podrías señalarme algo que discute más sobre las cabezas topológicas? Por lo general, seguimos el cierre antes de la fusión, pero ocasionalmente cerramos una rama antigua que nunca se cerró (pero que puede haberse fusionado o no) y simplemente dejamos la cabeza allí. Cualquier problema particular con eso? –

+2

No sé de "discute" pero solo puedes ver tus cabezas topológicas haciendo: 'hg heads --topo' –

23

Cerrar la rama 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 sugerí que evite los nombres de las sucursales permanentes para las líneas de desarrollo efímeras. 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 ramas, 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 tanto MG y yo (somos los que responden primarios en sus dos cuestiones relacionadas entre sí) se debe a una y otra vez que la gente ve ponen realmente molesto cuando se enteran de que los nombres de las sucursales son permanentes en Mercurial. Este es el intercambio habitual, que se realiza solo en el IRC varias veces a la semana:

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

o parecida:

  • Persona C: "Me nombrado una rama 'comercialización función estúpida me hizo añadir' y quiero empujar a que el cambio w/o empujando el nombre de la sucursal."
  • Persona B: "No puede. Puede fusionarlo en predeterminado, pero ese nombre es permanente en el conjunto de cambios. Tendría que volver a crear el conjunto de cambios para deshacerse de él!"
  • C: "¡Pero en git los nombres de mi sucursal son solo locales!"
  • B: "Sí, en Mercurial se llaman marcadores".

Si desea que los nombres permanentes, siempre sucursales en los cambios (y MG, mi co-responde a ambas preguntas hace exactamente eso) entonces por todos los medios usarlos, y no se preocupe un poco acerca actuación. Pero no se preocupe por cómo sus herramientas representan las ramas: al igual que Mercurial, las herramientas se construyen típicamente para escalar en la cantidad de conjuntos de cambios, no en el número de ramas. Por lo tanto, a menudo hacen cosas ingenuas como poner todos los nombres de las sucursales en un solo menú desplegable. Este problema de la GUI finalmente se solucionará cuando las sucursales con nombre se vuelvan más populares.

El excelente Guide to Branching in Mercurial de Steve Losh hace un excelente trabajo explicando sus (¡cuatro!) Opciones. Elige lo que te gusta y confía en que hay muchas personas a las que les gusta cualquiera que elijas, y al menos algunos de ellos tienen más sucursales de las que jamás tendrás.

+0

respuesta muy agradable, estoy totalmente de acuerdo con los consejos que aquí. –

+0

¡Muchas gracias! Soy bastante consciente de los diferentes modelos de ramificación que podemos usar, en su mayoría solo tenía curiosidad sobre cómo o si las ramas cerradas afectaron las afirmaciones de rendimiento de muchas ramas. –

Cuestiones relacionadas