2010-04-28 8 views
17

Me pregunto si la opción merge = union en .gitattributes tiene sentido para los archivos .pbxproj.¿Debería fusionar archivos .pbxproj con git usando merge = union?

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

Ejecutar nivel de archivo de 3 vías de mezcla para archivos de texto, pero tomar las líneas de ambas versiones, en lugar de dejar marcas 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?

+0

Hola Ortwin, ¿terminaste intentando esto y, si es así, cuál es tu experiencia? – Dick

+0

Dick, fui a fusionarme manualmente pero en el 90% de los casos termino agregando ambos lados. Usar un cliente git gráfico como Tower esta fusión manual no es un gran problema, así que esto funciona muy bien para mí. –

Respuesta

17

No es un directa experiencia, pero:

  • Este SO question realmente consejos de nuevo la fusión .pbxproj archivos.

El archivo pbxproj no es realmente mergable humano.
Si bien es texto ASCII simple, es un formulario de JSON. Básicamente, desea tratarlo como un archivo binario.

(por lo tanto una gitignore solution)

En realidad, Peter Hosey añade en el comentario:

Es un property list, no JSON. Mismas ideas, diferente sintaxis.

La verdad es que es mucho más dañina para no permitir la fusión de ese archivo .pbxproj de lo que es útil.
El archivo .pbxproj es simplemente JSON (similar a XML). Por experiencia, casi el único conflicto de fusión que alguna vez obtuviste es si dos personas han agregado 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.

lo tanto, una combinación de 'unión' (con un gitattributes merge directive) tiene sentido, pero hacer alguna prueba para ver si hace lo mismo que el guión mencionado en la última pregunta.

+1

Es una lista de propiedades, no JSON. Mismas ideas, diferente sintaxis. http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/PropertyLists/ –

+0

@Peter: gracias por la corrección. He actualizado la respuesta. – VonC

+0

Acabo de encontrar esta pregunta y respuesta. Seguramente parece una buena idea, no puedo pensar en dónde las entradas intercaladas al azar se meterían con cualquier cosa. ¿Alguien tiene experiencia tratando esto? –

7

He estado trabajando con un gran equipo últimamente y *.pbxproj merge=union intentado, pero al final tuvo que retirarla.

El problema es que las llaves se vuelven fuera de lugar de forma regular, lo que hace que los archivos sean ilegibles. Es verdad que funciona la mayor parte del tiempo, pero falla tal vez 1 de cada 4 veces.

Volvemos al uso de *.pbxproj -crlf -merge por el momento. Esta parece ser la mejor solución que es viable para nosotros.

+0

He tenido la misma experiencia que Corey. Para nosotros ocurrió cuando dos desarrolladores agregaron un Grupo en diferentes ramas. El archivo de proyecto maneja la clasificación grupal de una manera impar que hace que merge = union no funcione correctamente en este caso. Para nosotros, la desventaja cuando esto no supera los beneficios cuando tiene éxito. Una vez que está acostumbrado a fusionar los cambios laterales izquierdo y derecho en el archivo del proyecto, no es tan malo. – hustoj2