J'ai travaillé sur des applications iPhone à plein temps depuis le lancement du SDK, la plupart de ce temps passé à travailler en équipe avec plusieurs développeurs.
La vérité est qu'il est bien plus dangereux d'interdire la fusion de ce fichier .pbxproj que cela n'est utile. Comme vous le dites, lorsque vous ajoutez un fichier à moins que d'autres personnes ne l'obtiennent, ils doivent également l'ajouter à leur projet - dans une application de n'importe quelle taille, c'est nul et cela enlève également un énorme avantage au contrôle du code source en ce que vous ne peut pas vraiment revenir à un état de projet antérieur complet uniquement via git.
Le fichier .pbxproj est simplement une liste de propriétés (similaire à XML). Par expérience, à peu près le SEUL conflit de fusion que vous avez rencontré est si deux personnes ont ajouté des fichiers en même temps. La solution dans 99% des cas de conflit de fusion est de conserver les deux côtés de la fusion, ce qui pour git implique au moins simplement de supprimer toutes les lignes >>>>, <<<< et ====. En fait, c'est si courant que j'ai créé un simple script shell pour corriger un fichier .pbxproj dans un état de fusion à partir de git, je l'exécute depuis le répertoire du projet (au niveau des classes):
#!/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
Dans le pire des cas, si cela échoue (vous demandez à XCode de charger le projet et le chargement échoue), vous supprimez simplement le fichier .pbxproj, extrayez le maître de git et rajoutez vos fichiers. Mais je n'ai jamais eu cela pendant de nombreux mois d'utilisation avec ce script, travaillant à nouveau à plein temps sur des applications iPhone avec plusieurs autres développeurs.
Une autre option (indiquée dans les commentaires ci-dessous) que vous pouvez essayer d'utiliser à la place du script, consiste à ajouter cette ligne à un fichier .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Ensuite, git prendra toujours les deux côtés d'une fusion pour les fichiers .pbxproject, ayant le même effet que le script que j'ai fourni uniquement sans aucun travail supplémentaire.
Enfin, voici mon fichier .gitignore complet, montrant ce que je l'ai configuré pour ignorer car il y a quelques choses que vous ne voulez pas - dans mon cas, en réalité, juste les restes d'emacs et tout le répertoire de construction:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile