He notado que someanswers a preguntas sobre nombres de ramas quote the Mercurial wiki para indicar que las convenciones de nombres de rama por función o rama por error pueden causar problemas de rendimiento. ¿La capacidad de marcar sucursales como cerradas con el indicador --close-branch
en confirmaciones tiene algún efecto en este reclamo de rendimiento?¿Cómo afectan las ramas cerradas el rendimiento de Mercurial?
Respuesta
¿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).
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.
respuesta muy agradable, estoy totalmente de acuerdo con los consejos que aquí. –
¡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. –
- 1. Evitar el envío de confirmaciones que se agregan a las ramas cerradas
- 2. ¿Cómo afectan las restricciones de DataTable de ADO.NET al rendimiento?
- 3. QGraphicsScene, las coordenadas de los artículos afectan el rendimiento?
- 4. Alternar entre ramas Mercurial
- 5. El gancho Mercurial Changegroup varía en función de las ramas
- 6. ¿Por qué los retrocesos de Mercurial en una rama afectan a otras ramas?
- 7. ¿Los modificadores de acceso afectan el rendimiento?
- 8. ¿Los comentarios afectan el rendimiento de Perl?
- 9. Mercurial "ramas de proveedores" de repositorios externos?
- 10. Administrar ramas de publicación en Mercurial
- 11. Cómo | ¿Dónde se almacenan las variables cerradas?
- 12. Disposición de depósito Mercurial para múltiples ramas
- 13. Python y cerradas las variables
- 14. ¿Las vistas de la base de datos afectan el rendimiento de la consulta?
- 15. git vs mercurial rendimiento
- 16. ¿Las otras aplicaciones afectan el rendimiento de mi aplicación en iOS?
- 17. ¿Las instrucciones de importación múltiples en un programa afectan el rendimiento?
- 18. ¿Cómo se importan las ramas de git en mercurial con la conversión de hg?
- 19. ¿Cómo afectan los símbolos de depuración el rendimiento de un ejecutable Linux compilado por GCC?
- 20. ¿Las modificaciones de MTU afectan ambas direcciones?
- 21. Mercurial: Ramas con nombre frente a múltiples repositorios
- 22. Mercurial: fusionando un archivo entre ramas en un repositorio
- 23. Mercurial: mantener 2 ramas sincronizadas pero con ciertas diferencias persistentes?
- 24. ¿El nombre de la tabla o la longitud del nombre de la columna afectan el rendimiento?
- 25. ¿Cómo afectan las diferentes políticas de retención a mis anotaciones?
- 26. detectar si todas las pestañas de la aplicación están cerradas
- 27. ¿Cómo 'git pull' todas las ramas fácilmente?
- 28. ¿Las activaciones espúreas afectan a Thread.sleep?
- 29. gitignore en todas las ramas?
- 30. ¿Cómo afectan los valores NULL al rendimiento en una búsqueda en la base de datos?
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? –
No sé de "discute" pero solo puedes ver tus cabezas topológicas haciendo: 'hg heads --topo' –