¿Hay alguna herramienta de diff / merge "inteligente" / sensible al context?

Tantas veces cuando haces un diff de dos versiones de un file de código, la herramienta se arruina completamente entendiendo qué ha cambiado … tal vez muevas un bloque de código dentro de un nivel extra de llaves o agregas un extra ...} else if {... y de repente todo se desincroniza.

Entonces, me pregunté si existían herramientas de context que realmente intentaran comprender el contenido y tomar decisiones más inteligentes, en lugar de hacer un diff genérico.

Más útil, ¿puede uno conectar tales herramientas en VCS como git / SVN?

  • SemanticMerge para fonts C # y Java
  • DiffDog es XML-aware | difieren | fusión