2011-03-07 18 views
7

Acabamos de cambiar a mercurial de subversión y hay una cosa que está consumiendo más tiempo de lo esperado; uniendo cabezasCómo fusionar automáticamente 2 cabezales con mercurial

Nos encanta el hecho de que mantiene las fusiones independientes de las 2 confirmaciones (en comparación con la subversión), pero terminamos fusionando regularmente 2 encabezados para cambios no relacionados.

Escenario simple. Tanto yo como Bob estamos al día. Ambos tenemos nuestro repositorio actualizado en la rama predeterminada (también conocida como principal) y mejoramos en diferentes archivos.

Nos comprometemos y solo uno será capaz de presionar al servidor central, el otro creará 2 cabezas. Luego, tire, seleccione 2 cabezas, fusione (irá fácilmente ya que los cambios están en diferentes archivos). Comprometerse, luego empujar.

Por lo tanto, hay una extensión que hace estos pasos Intento de fusionar Si no hay conflictos Commit demás Cancel fusionamos

Buscamos tener esta carrera en un servidor automatizado, por lo que esto es 1 línea de comando y otro +1 si puede hacer la fusión sin tocar la copia de trabajo.

Gracias!


Actualización:
Terminamos haciendo un par de scripts de Python para manejar las tareas más comunes (fusionar hasta & acumulación; fusionar 2 cabezas).

¡Gracias por la ayuda!

Respuesta

3

Parece que debería poder usar hg fetch para esto. Extrae los cambios del servidor, se fusiona y luego confirma automáticamente la fusión. También solicita conflictos de fusión. Se incluye con Mercurial, así que solo agregue

fetch = 

a su hgrc, y debe tener todo listo. No impulsa automáticamente, pero de todos modos eso es una mala idea. Por lo general, querría ejecutar pruebas y resolver cualquier problema de fusión antes de enviar su código a todos los demás.

+1

FWIW El autor de Mercurial, Matt, cree que fetch es una muy mala idea: http://www.selenic.com/pipermail/mercurial/2009-June/026320.html –

+0

@ Ry4an - Posiblemente, pero podría cambiar automáticamente de padres a través de su hgrc (http://www.selenic.com/pipermail/mercurial/2009-June/026324.html). Fetch ahorra muchas pulsaciones de tecla y funciona muy bien para repositorios simples donde los miembros del equipo trabajan estrechamente entre ellos. – derekerdmann

+1

¿qué tiene que ver --switch-parent con algo? Matt no se recomienda en contra de buscar porque no sabía sobre el cambio de padre (probablemente lo escribió). Está recomendando no hacerlo porque piensa que es una mala característica en general. Ha hablado sobre desaprobarlo/eliminarlo por completo, pero teme que sea demasiado tarde.Es una mala idea. –

3

¿Las fusiones realmente toman tanto tiempo? Si son "cambios no relacionados", ¿no solo toma un abrir y cerrar de ojos?

Alguien ya ha sugerido fetch y alguien más probablemente sugerirá rebase, pero personalmente considero que la fusión es la codificación y quiero que sea manual. No lleva casi ningún tiempo y es una oportunidad para dar un buen mensaje como "Poner el trabajo de Jane a la mitad de mi trabajo de FooBar" (en lugar de los inútiles mensajes de confirmación que proporciona la búsqueda).

+1

Estamos tratando de automatizar muchas de las tareas comunes, y mientras se ejecuta esa secuencia de comandos, 2 cabezas serán comunes. Podríamos detener el sistema y esperar la fusión de las 2 cabezas, pero preferiríamos no hacerlo. – Babouchk

+1

La fusión ** es ** codificación, y ninguna de las dos debe cometerse automáticamente sin una intervención humana. –

Cuestiones relacionadas