2009-10-11 10 views
27

Estaba buscando una aplicación Mac de código abierto, y me dieron algunos valores sugeridos para .gitignore. Eran lo que esperaría ...Git y pbxproj

Sin embargo, también sugirieron una entrada en un archivo .gitattributes:

*.pbxproj -crlf -diff -merge

No soy el más eficiente en términos de GIT, así que estaba preguntándose: ¿cuáles son exactamente los beneficios de agregar esta línea? ¿Qué hace en particular? Solo he visto esto sugerido en este one project, y si fuera una práctica normal, habría esperado verlo en otro lugar ahora mismo. Así que tenía curiosidad sobre cómo se aplica específicamente al archivo pbxproj.

+0

La publicación http://stackoverflow.com/questions/2615378/how-to-use-git-properly-with-xcode alienta la fusión de archivos '.pbxproj'. – Besi

Respuesta

25

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

Esto es lo que hacen las banderas individuales:

-crlf: no utilice CRLF < => conversión cr

-diff: no diff del archivo

-merge: No intente para combinar el archivo

del libro de Scott Chacon Pro Git por

Algunos archivos parecen archivos de texto, pero para todos los efectos deben ser tratados como datos binarios. Por ejemplo, proyectos de Xcode en el Mac contienen un archivo que termina en .pbxproj, que es básicamente un JSON (texto plano JavaScript formato de datos) de datos grabe en disco por el IDE que registra los valores de creación y por lo en. Aunque es técnicamente un archivo de texto, porque es todo ASCII, que no quiere a tratarlo como tal porque es realmente una base de datos ligera - que no se puede combinar el contenido si dos personas cambiaron, y las diferenciaciones generalmente no son útiles. El archivo debe ser consumido por una máquina. En esencia, usted desea tratarlo como un archivo binario.

+0

'-crlf' no es" caracteres crlf de tira "pero ** no ** (la opción es negada) use conversión crlf (crlf <-> cr) en este archivo. –

+11

En mi experiencia (aunque algo limitada), los cambios muy simples (como agregar un archivo nuevo) generalmente se pueden fusionar en un archivo .pbxproj. Si haces algo más complicado, como hacer que una rama agregue un archivo y otra redistribuir tus grupos de origen, entonces usualmente obtendrás un .pbxproj corrupto, pero para cosas simples, a menudo es factible. No estoy seguro de si es mejor tratar los archivos .pbxproj como binarios o no. –

+1

Acepto, he tenido un buen éxito al combinar archivos .pbxproj usando Perforce. Cuidé mucho y revisé cada cambio a fondo. Lleva tiempo, pero ciertamente es factible. Hasta ahora no he terminado con un archivo de proyecto corrupto. Pero también sabía qué cambios había hecho, y solo me estoy integrando en una dirección (simplemente no estoy integrando todo). – LearnCocos2D

6

A menudo, una diferencia es útil en el momento del compromiso para comprobar qué se ha cambiado. Así que me parece útil mantener la capacidad de diferenciación, pero solo evitar la fusión. Así que yo uso esto en mi archivo .gitattributes:

* .pbxproj -crlf -merge

En otra nota, Cualquiera ha intentado el uso de combinar = unión de archivos pbxproj? Ver: Should I merge .pbxproj files with git using merge=union?

3

Escribí un script de python llamado xUnique para resolver este problema de conflictos de combinación.

Este script hacer las cosas siguientes:

  • reemplazar los 24 caracteres UUID a todo el proyecto únicas digiere 32 caracteres MD5, y eliminar cualquier UUID no utilizados (por lo general causada por la combinación descuidada antes). Esto evitaría UUID duplicados porque diferentes máquinas/Xcode generan diferentes UUID en este archivo. Xcode lo reconoce y el proyecto se puede abrir. Durante este proceso, elimine todas las líneas no válidas en el archivo de proyecto
  • ordene el archivo del proyecto. Escribí un python version de sort-Xcode-project-file from Webkit team con más características nuevas:
    • apoyo para ordenar PBXFileReference y PBXBuildFile secciones
    • Eliminar archivos duplicados/árbitros
    • evitar la creación de nuevos archivos, incluso si no hay cambios realizados, esto hace menos confirmaciones después de usar este script

Más detalles y actualizaciones de xUnique, por favor refiérase a README