Ich habe seit dem Start des SDK Vollzeit an iPhone-Anwendungen gearbeitet. Die meiste Zeit habe ich in Teams mit mehreren Entwicklern gearbeitet.
Die Wahrheit ist, dass es weitaus schädlicher ist, das Zusammenführen dieser .pbxproj-Datei zu verbieten, als es hilfreich ist. Wie Sie sagen, wenn Sie eine Datei hinzufügen, es sei denn, andere Personen erhalten diese Datei, müssen sie sie auch zu ihrem Projekt hinzufügen - in einer Anwendung jeder Größe ist das scheiße und es nimmt Ihnen auch einen großen Vorteil der Quellcodeverwaltung kann nicht wirklich nur durch git zu einem vollständigen früheren Projektstatus zurückkehren.
Die .pbxproj-Datei ist einfach eine Eigenschaftsliste (ähnlich wie XML). Erfahrungsgemäß besteht der einzige Zusammenführungskonflikt, den Sie jemals hatten, darin, dass zwei Personen gleichzeitig Dateien hinzugefügt haben. Die Lösung in 99% der Fälle von Zusammenführungskonflikten besteht darin, beide Seiten der Zusammenführung beizubehalten, was für git zumindest einfach das Entfernen von >>>>, <<<< und ==== Zeilen beinhaltet. Tatsächlich ist dies so häufig, dass ich ein einfaches Shell-Skript erstellt habe, um eine .pbxproj-Datei in einem Zusammenführungsstatus von git zu reparieren. Ich führe dies aus dem Projektverzeichnis (auf Klassenebene) aus:
#!/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
Im schlimmsten Fall, wenn es fehlschlägt (Sie bitten XCode, das Projekt zu laden, und es kann nicht geladen werden), löschen Sie einfach die .pbxproj-Datei, checken den Master von git aus und fügen Ihre Dateien erneut hinzu. Aber ich habe das in vielen Monaten der Verwendung mit diesem Skript noch nie erlebt und wieder mit mehreren anderen Entwicklern Vollzeit an iPhone-Anwendungen gearbeitet.
Eine weitere Option (auf die in den Kommentaren unten hingewiesen wird), die Sie anstelle des Skripts verwenden können, besteht darin, diese Zeile einer .gitattributes-Datei hinzuzufügen:
*.pbxproj text -crlf -diff -merge=union
Dann nimmt git immer beide Seiten einer Zusammenführung für die .pbxproject-Dateien in Anspruch und hat den gleichen Effekt wie das Skript, das ich nur ohne zusätzliche Arbeit bereitgestellt habe.
Zuletzt ist hier meine vollständige .gitignore-Datei, die zeigt, was ich ignorieren soll, da es ein paar Dinge gibt, die Sie nicht wollen - in meinem Fall wirklich nur Emacs-Überreste und das gesamte Build-Verzeichnis:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile