¿Hay alguna herramienta de fusión para fusionar automáticamente los cambios realizados en la misma línea (pero en diferentes lugares)?

Este es un caso un poco especial, sé que en el caso general (es decir, código de computadora) no es seguro fusionar automáticamente dos cambios en la misma línea en diferentes twigs.

Sin embargo, en este caso, la línea en cuestión es una oración en inglés, y los cambios son de producción. Un ejemplo:

Base de fusión:

Encuentra tweets desde tu iPhone o teléfono Android, ¡o escribe un tweet tuyo!

Rama 1:

Encuentra% (PRODUCT: MESSAGE_PLURAL) s de tu iPhone o teléfono Android, ¡o escribe un tweet tuyo!

Rama 2:

Encuentra tweets de tu iPhone o teléfono Android, o escribe un% (PRODUCTO: MENSAJE) tuyo.

Este es un caso trivial para fusionar a mano, pero lamentablemente estamos generando una gran cantidad de estos conflictos en este momento. ¿Hay una herramienta de combinación que pueda hacer esto? (O cualquier otra forma de automatizar este process)

Traté de hacer esto en mi herramienta de combinación, Araxis Merge y salió vacía.

Hubo una pregunta reciente en el foro Beyond Compare sobre esto: http://www.scootersoftware.com/vbulletin/showthread.php?t=9411 tenga en count que los desarrolladores de Beyond Compare ni siquiera son conscientes de una herramienta que hace esto.

Un par de opciones: Araxis Merge y (creo) Beyond Compare ambos le permiten controlar los resultados de fusión con expresiones regulares. Podrías explorar eso.

Otra opción, git diff branch1..branch2 -U99999 --word-diff > file.txt

Lo que tendrías entonces sería: Encuentra [-% (PRODUCT: MESSAGE_PLURAL) s -] {+ tweets +} desde tu iPhone o teléfono Android, o escribe un [-tweet -] {+% (PRODUCTO: MESSAGE) s +} ¡tuyo!

No soy realmente un desarrollador, pero si lo fuera, creo que podría escribir una expresión regular que identificara instancias de [-*-] o {+*+} , eliminara estos caracteres y alternadamente savea o borrara los contenidos basado en la presencia de $(*) , que parece ser un elemento común en la productización.

Esto podría ser un problema si hay muchos files, ya que implica el paso adicional de asignar el resultado > file.txt a los files relevantes.

Posible solución: git ls-files -u | git diff branch1..branch2 -U99999 --word-diff > ./intermediate/filename git ls-files -u | git diff branch1..branch2 -U99999 --word-diff > ./intermediate/filename

Ese código es incorrecto, pero debería poder escribir un script bash que tome todos los files no fusionados, guarde la diferencia de cada file con el context del file completo en un file intermedio, con el nombre del file original.

Otras opciones:

Podría fusionar las twigs como normalmente, pero escriba una secuencia de commands para resolver los conflictos de fusión en function de la lógica anterior, aunque con la complejidad añadida de varias líneas, parsing <<<<<<, =======, >>>>>, etc.

Alguien con más experiencia que yo también podría usar git-filter-branch