J'ai travaillé sur des applications iPhone à temps plein depuis le SDK de lancement, la plupart du temps passé à travailler en équipe avec plusieurs développeurs.
La vérité est que c'est plus nocif pour interdire la fusion de ce .pbxproj fichier qu'il est utile. Comme vous le dites, lorsque vous ajoutez un fichier de moins que les autres à obtenir ce fichier, ils ont aussi l'ajouter à leur projet dans une application de toute taille, qui suce et il emporte également un énorme avantage du contrôle de code source dans le fait que vous ne peut pas vraiment revenir à un projet antérieur, juste par git.
L' .pbxproj fichier est simplement une liste de propriétés (similaire à XML). À partir de l'expérience, à peu près le SEUL conflit de fusion vous étiez jamais obtenir est que si deux personnes ont ajouté des fichiers en même temps. La solution dans 99% des cas de conflit de fusion est de garder les deux côtés de la fusion, qui git au moins tout simplement implique le retrait des >>>>, >>>>, et ==== lignes. En fait, c'est tellement commun que j'ai créé un petit script shell pour fixer un .pbxproj fichier dans un état de fusion à partir de git, je lance à partir de dans le répertoire du projet (dans les Classes de niveau):
#!/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
Pire des cas si elle échoue (vous demandez XCode pour charger le projet et il ne parvient pas à charger), il vous suffit de supprimer le .pbxproj fichier, consultez la maîtrise de git, et re-ajouter vos fichiers. Mais je n'ai jamais eu qui se produisent dans de nombreux mois d'utilisation avec ce script, de nouveau travailler à plein temps sur les applications iPhone avec plusieurs autres développeurs.
Une autre option (souligné dans les commentaires ci-dessous) que vous pouvez essayer d'utiliser à la place du script, c'est pour ajouter cette ligne à un .gitattributes fichier:
*.pbxproj text -crlf -diff -merge=union
Puis git toujours deux côtés à une fusion pour l' .pbxproject fichiers ayant le même effet que le script que j'ai fourni que sans travail supplémentaire.
Enfin, voici mon complet .gitignore fichier, montrant ce que je ne l'ai mis à l'ignorer comme il ya quelques choses que vous ne voulez pas dans mon cas est vraiment juste emacs restes et de l'ensemble du répertoire de construction:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile