2010-02-10 8 views
5

Cuando se ha realizado una refactorización simple como "cambiar el nombre del campo" en una rama, puede ser muy difícil fusionar los cambios en las otras ramas. (Extracto método es mucho más difícil, ya no parecen las herramientas de mezcla para que coincida con los bloques sin cambios) así¿Existe una herramienta de fusión de 3 vías que "comprenda" la refactorización común?

Ahora en mis sueños, pienso en una herramienta que puede grabar (o hacer ejercicio) lo refactorización bien definido las operaciones se han realizado en una rama y luego "reproducirlas" en la otra rama, en lugar de tratar de fusionar todas las líneas afectadas por la refactorización.

ver también "Is there an intelligent 3rd merge tool that understands VB.NET" para la otra mitad de mi dolor!


también tiene a nadie intente algo como MolhadoRef (blog article about MolhadoRef and Refactoring-aware SCM), Esto es, en teoría, control de código fuente refactorización-conscientes.

Respuesta

2

Puede usar coccinelle para hacer el mismo tipo de operaciones de refactorización en diferentes ramas. No registrará o descubrirá lo que se está haciendo por sí mismo, tendrá que decirle explícitamente qué hacer, pero aparte de eso, hará la misma refactorización más o menos fácilmente en todas las ramas a las que lo indique.

Esta herramienta se han utilizado en el núcleo Linux para updating API usage etc.

Para citar de su página web:

"Coccinelle es una adaptación del programa y motor de transformación que proporciona el lenguaje SMPL (Parche semántico Idioma) para especificar las coincidencias deseadas y las transformaciones en C code. "

+0

lástima que no funcione para C# o VB.NET, pero al menos alguien más ha pensado en el problema. –

0

Araxis Merge no entiende la refactorización común, pero es la única herramienta de combinación de tres vías que he usado. Está disponible tanto para Mac como para Windows, y es compatible con una API de automatización así que me imagino que podría hacer lo que quiera con que si estabas inclinado. Para el registro no tengo ninguna conexión ección con Araxis además de que he usado su producto.

+0

hemos encontrado que Araxis Merge es una de las mejores herramientas de fusión convencionales. (La API de automatización no ayudará, ya que necesita la herramienta de refactorización para "ser dueño" del problema) –

-1

En Linux puede usar Meld o en Windows Winmerge.

En cualquier caso, ambas herramientas solo "comprenden" las líneas de texto. La refactorización requiere una forma de entender el código, que está más allá de cualquier herramienta de fusión/comparación que yo conozca.

2

Darcs soporta una 'token replace' operación de una confirmación, que sustituye a todas las instancias de una ficha con otro, y se funde como desee desea.

+0

el problema con "token replace" es que el alcance debe tenerse en cuenta para un cambio de nombre seguro –

0

Plastic SCM (www.plasticscm.com) La herramienta de combinación de 3 vías implementa Xmerge, que es el único que puede ayudarle a fusionar el código que se ha movido.

0

Ahora hay algunas herramientas de fusión mejores (por ejemplo, SemanticMerge) basadas en el análisis del lenguaje, diseñadas para tratar con el código que se ha movido y modificado. JetBrains (la creación de ReShaper) acaba de publicar un blog sobre esto.

Ha habido un montón de research en esto en los últimos años, por último algunos productos están llegando al mercado.

Cuestiones relacionadas