He trabajado en aplicaciones de iPhone a tiempo completo desde el lanzamiento del SDK, la mayor parte de ese tiempo lo he pasado trabajando en equipos con varios desarrolladores.
La verdad es que es mucho más dañino no permitir la fusión de ese archivo .pbxproj que útil. Como dice, cuando agrega un archivo a menos que otras personas obtengan ese archivo, también tienen que agregarlo a su proyecto, en una aplicación de cualquier tamaño, eso apesta y también quita un gran beneficio del control del código fuente en el sentido de que usted realmente no puede volver a un estado de proyecto anterior completo solo a través de git.
El archivo .pbxproj es simplemente una lista de propiedades (similar a XML). Por experiencia, el ÚNICO conflicto de fusión que ha tenido 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, que para git al menos simplemente implica eliminar cualquier línea >>>>, <<<< y ====. De hecho, esto es tan común que he creado un script de shell simple para arreglar un archivo .pbxproj en un estado de fusión desde git, lo ejecuto desde el directorio del proyecto (en el nivel de Clases):
#!/bin/sh
projectfile=`find -d . -name 'project.pbxproj'`
projectdir=`echo *.xcodeproj`
projectfile="${projectdir}/project.pbxproj"
tempfile="${projectdir}/project.pbxproj.out"
savefile="${projectdir}/project.pbxproj.mergesave"
cat $projectfile | grep -v "<<<<<<< HEAD" | grep -v "=======" | grep -v "^>>>>>>> " > $tempfile
cp $projectfile $savefile
mv $tempfile $projectfile
En el peor de los casos, si falla (le pide a XCode que cargue el proyecto y no se carga), simplemente elimine el archivo .pbxproj, consulte el maestro de git y vuelva a agregar sus archivos. Pero nunca me ha pasado eso en muchos meses de uso con este script, nuevamente trabajando a tiempo completo en aplicaciones de iPhone con varios otros desarrolladores.
Otra opción (señalada en los comentarios a continuación) que puede intentar usar en lugar del script es agregar esta línea a un archivo .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Luego, git siempre tomará ambos lados de una combinación para los archivos .pbxproject, teniendo el mismo efecto que el script que proporcioné solo sin ningún trabajo adicional.
Por último, aquí está mi archivo .gitignore completo, que muestra lo que tengo configurado para ignorar, ya que hay algunas cosas que no desea, en mi caso, solo los restos de emacs y todo el directorio de compilación:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile