objective-c cocoa git merge

objective c - ¿Debo combinar archivos.pbxproj con git usando merge=union?



objective-c cocoa (2)

Me pregunto si la opción merge = union en .gitattributes tiene sentido para los archivos .pbxproj.

Los estados de la página de manual para esta opción:

Ejecute la combinación de niveles de archivos de 3 vías para archivos de texto, pero tome líneas de ambas versiones, en lugar de dejar marcadores de conflicto. Esto tiende a dejar las líneas agregadas en el archivo resultante en orden aleatorio y el usuario debe verificar el resultado.

Normalmente, esto debería estar bien para el caso del 90% de agregar archivos al proyecto. ¿Alguien tiene experiencia con esto?


He estado trabajando con un equipo grande últimamente y probé *.pbxproj merge=union , pero al final tuve que eliminarlo.

El problema era que las llaves se iban a poner fuera de lugar de forma regular, lo que hacía que los archivos fueran ilegibles. Es cierto que funciona la mayor parte del tiempo, pero tal vez falla 1 de cada 4 veces.

Volvemos a utilizar *.pbxproj -crlf -merge por ahora. Esta parece ser la mejor solución que es viable para nosotros.


No es una experiencia directa , pero:

  • Esta pregunta SO realmente aconseja de nuevo fusionar archivos .pbxproj .

El archivo pbxproj no es realmente humano fusionable.
Si bien es un texto ASCII simple, es un forma de JSON . Esencialmente quieres tratarlo como un archivo binario.

(De ahí una solución gitignore )

En realidad, Peter Hosey agrega en el comentario:

Es una lista de propiedades , no JSON. Las mismas ideas, sintaxis diferente.

La verdad es que es más dañino evitar la combinación de ese archivo .pbxproj que lo que es útil.
El archivo .pbxproj es simplemente JSON (similar a XML). Por experiencia, casi el ÚNICO conflicto de combinación que alguna vez obtuviste es si dos personas agregaron archivos al mismo tiempo. La solución en el 99% de los casos de conflicto de fusión es mantener ambos lados de la fusión.

Por lo tanto, una fusión ''unión'' (con una directiva de fusión de gitattributes ) tiene sentido, pero haga algunas pruebas para ver si hace lo mismo que el script mencionado en la última pregunta.