2011-01-10 14 views
5

Estoy jugando con Mercurial para ver si es adecuado para su uso en nuestra empresa. Uno de los grandes puntos de venta es la capacidad de fusión. Así que he estado jugando con la creación de sucursales y fusionándolas de nuevo en la línea predeterminada. La prueba implicó simplemente agregar un nuevo método (methodA) a un solo archivo Java en una rama, y ​​agregar un método diferente (methodB) en un lugar completamente diferente en el mismo archivo en otra rama.La fusión con MercurialEclipse tiene conflictos que se resuelven automáticamente cuando se fusionan en la línea de comandos

Cuando lo intenté por primera vez en Eclipse utilizando la opción team-> merge, encontré que la primera fusión funcionó bien (es decir, agregó el método A). Cuando trato de fusionar la segunda rama ahora, me dice que hay un conflicto que debo resolver. Esto es muy desafortunado ya que pensé que este simple tipo de fusión era exactamente el tipo de cosa que Mercurial debía manejar con facilidad.

Probé la misma prueba usando la línea de comandos, y esta vez funcionó bien, es decir, ambas combinaciones tuvieron éxito sin necesidad de resolver conflictos. En cuanto a la salida de la consola en Eclipse que está utilizando el siguiente comando para realizar la combinación:

hg -y merge --config ui.merge=internal:fail -r 611ca2784593525cdafd3082b17d3310037a5d58 -f 

mientras que cuando corro yo mismo desde la línea de comandos hago simplemente:

hg merge -r 1234 

Es el uso de la estrategia de fusión 'interna: ¿falla' causando que esto suceda dentro de Eclipse? Y si es así, ¿es posible cambiar el comportamiento predeterminado para que funcione de la misma manera que en la línea de comandos?

+0

Lo es. Aquí hay un enlace a consejos y trucos en el sitio de HG. http://mercurial.selenic.com/wiki/TipsAndTricks#line-227 (Es la sugerencia 22 al momento de escribir). La única opción que veo es utilizar una herramienta de fusión externa. Ni idea de lo que hace, ya que uso TortoiseHG para la mayoría de mis interacciones HG. La próxima versión de TortoiseHG es REALMENTE agradable ya que ahora es un banco de trabajo, por lo que puede hacer todo desde la interfaz de usuario. – Mikezx6r

Respuesta

8

El internal:fail le dice a Mercurial que no intente fusionar nada. Ver the mercurial wiki para más detalles.

Parece que quien escribió el plugin Eclipse para mercurial sintió que podía controlar mejor la fusión en eclipse al hacer que Mercurial automáticamente no fusionara todo y luego hacer la fusión en Eclipse, y presumiblemente llamar al hg resolve --mark ... cuando se fusionan los archivos.

Desde la línea de comandos Mercurial que está recibiendo tanto el comportamiento premerge que maneja fusiones triviales, y luego aún si hay conflictos de la invocación de la herramienta desde su MergeToolConfiguration que tiene la prioridad más alta para ese tipo de archivo y está disponible en su sistema local.

+5

Gracias, pude obtener el plugin de Eclipse para realizar las fusiones simples automáticamente marcando la casilla 'Usar herramienta de fusión externa para resolver conflictos' en las preferencias. Es un poco desafortunado que necesite usar una herramienta de combinación externa solo para que el complemento también realice el comportamiento de precombinación. Idealmente, me gustaría obtener el comportamiento de pre-fusión, pero aún así usar Eclipse para resolver conflictos. – DaveJohnston

Cuestiones relacionadas