Escribir mi propio script para resolver un conflicto de git en el momento de la fusión

Pregunta

¿Hay alguna forma de escribir un script que se enganche en el process de fusión de git y resolverá automáticamente el siguiente conflicto de combinación en el momento de la fusión?

Guión

Tenemos una versión de file controlada por git, que (entre otras cosas) contiene definiciones que deben tener valores integers en incremento.

MY_CONSTANT = 0xB; ANOTHER_CONSTANT = 0xC; 

Este file a menudo es editado por múltiples desarrolladores al mismo time, y es difícil combinarlo:

Desarrollador 1 agrega:

 DEV1_CONSTANT = 0xD; 

Desarrollador 2 agrega:

 DEV2_CONSTANT = 0xD; 

Cuando se fusiona, en realidad queremos que el file se vea así:

 MY_CONSTANT = 0xB; ANOTHER_CONSTANT = 0xC; DEV1_CONSTANT = 0xD; DEV2_CONSTANT = 0xE; 

(La última línea ha cambiado a 0xE ).

Sin embargo, git produce un conflicto de fusión (como se esperaba). Me gustaría que los conflictos en este file se resuelvan automáticamente en su lugar.

Consulte el documento githook . Lea la descripción del post-merge :

Este enlace no puede afectar el resultado de la fusión de git y no se ejecuta, si la fusión falló debido a conflictos.

En la versión actual de git, no hay algo así como merge-conflict-hook .

Sin embargo, aún puede implementar su propia secuencia de commands para manejar este problema. El pseudo código podría ser como:

 system('git fetch origin master') status = system('git merge origin/master') if status!=0 && check_enum_conflict() resolve_enum_conflict() end 

La implementación real será bastante compleja. Necesitas:

  1. Escribe un script para ejecutar los commands de git.
  2. Verifica el resultado de la combinación. Vea si el file enum está en conflicto.
  3. Analice el file enum e intente resolver el conflicto mediante progtwigción.
  4. Maneja todos los casos posibles. Ex. ¿Qué pasa si otro file también entra en conflicto?

Este será un trabajo realmente complejo. Hazlo si crees que vale la pena.

Ningún sistema de control de versiones puede resolver estos conflictos automáticamente porque no puede saber que los valores no importan en ninguna parte.

A mí me parece que no te importa qué valor se asigna a cada constante, siempre que sean diferentes e incrementen. ¿Consideró usar una enumeración para estas constantes y dejar que el comstackdor asigne los valores de las constantes enum en time de compilation?

Me gustaría publicar un ejemplo, pero no mencionaste qué lenguaje de progtwigción estás usando.