Combinar dos versiones modificadas de una cadena original

Esto está relacionado con el control de versiones, en una situación de modificación paralela en la que no conocemos el momento exacto de los cambios, por lo que asumimos que recibimos dos versiones modificadas de un archivo al mismo tiempo. Simplifico el problema:

Tengo una cadena S, con dos versiones modificadas, llamadas T y U. Puedo ver las diferencias entre S y T usando diff. Llamemos al parche hecho de T sobre S, como PT. Lo mismo para U, tendremos PU. Ahora, quiero fusionar PT y PU en un solo parche, de manera segura, siendo capaz de detectar los conflictos entre PT y PU a nivel de "palabra", no el típico nivel de línea de programación.

las preguntas:

1- ¿Existe tal algoritmo para fusionar dos parches?

2- ¿Cómo puedo detectar los conflictos entre T y U?

3- ¿Cuál es una política común para tratar los conflictos? para mí, una solución es elegir siempre los cambios de una de las versiones, digamos T, en caso de conflicto.

¿Hay alguna herramienta por ahí para hacer lo que estoy buscando?

preguntado el 22 de mayo de 12 a las 21:05

2 Respuestas

No hay herramientas de resolución de conflictos a nivel de palabra que se me ocurran. Siempre comparas líneas.

Puede escribir un controlador personalizado para su tipo de archivo. Creo que esto se hace a través de los atributos de git. Aquí puede hacer lo que quiera si la fusión no es una fusión de avance rápido.

contestado el 22 de mayo de 12 a las 22:05

¿Es teóricamente imposible escribir un algoritmo para la resolución de conflictos a nivel de palabra? por ejemplo, ¿qué sucede si estoy tratando con documentos de texto y se realizan dos modificaciones diferentes en la misma línea incluso sin que realmente entren en conflicto? - nvd_ai

@nvd_ai: si no fuera posible, no existirían herramientas como WinDiff. La pregunta es si eres capaz de escribir uno tú mismo. - Sabueso de seguridad

@Ramhound: supongo que el algoritmo para fusionar esto ya existe y soy un desarrollador capaz de implementarlo. No quiero reinventar la rueda. Sería más útil si pudiera sugerir una solución/algoritmo para esto. - nvd_ai

No conozco ninguna implementación que haga esto, sin embargo, puede obtener una buena ayuda al usar una herramienta de combinación que detecta y muestra las diferencias dentro de la línea. KDiff3 es tal herramienta. En el siguiente ejemplo, desea fusionar tanto el unsigned y int n cambios. Esto se hace editando manualmente la salida de combinación, pero la herramienta hace que esta operación sea muy simple (hasta el punto de que la única parte difícil es comprender los cambios en el código).

Captura de pantalla de KDiff3

contestado el 23 de mayo de 12 a las 11:05

Si. entonces esto visualiza la situación de la que estoy hablando. Me pregunto si hay un algoritmo para fusionar estas dos líneas correctamente porque a nivel de palabra no hay conflicto entre estas dos modificaciones. - nvd_ai

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.