С момента запуска SDK я работал над приложениями для iPhone все время, большую часть времени проводил в командах с несколькими разработчиками.
По правде говоря, запретить слияние этого файла .pbxproj гораздо вреднее, чем полезно. Как вы говорите, когда вы добавляете файл, если другие люди не получат этот файл, они также должны добавить его в свой проект - в приложении любого размера это отстой, а также лишает вас огромного преимущества контроля исходного кода в том, что вы не может вернуться к полному предыдущему состоянию проекта только через git.
Файл .pbxproj - это просто список свойств (аналогичный XML). По опыту можно сказать, что ЕДИНСТВЕННЫЙ конфликт слияния, который вы когда-либо возникали, - это когда два человека добавляли файлы одновременно. Решением в 99% случаев конфликта слияния является сохранение обеих сторон слияния, что для git, по крайней мере, просто включает удаление любых строк >>>>, <<<< и ====. На самом деле это настолько распространено, что я создал простой сценарий оболочки для исправления файла .pbxproj в состоянии слияния из git, я запускаю его из каталога проекта (на уровне классов):
#!/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
В худшем случае, если это не удается (вы просите XCode загрузить проект, а он не загружается), вы просто удаляете файл .pbxproj, проверяете мастер из git и повторно добавляете свои файлы. Но у меня никогда не случалось этого за многие месяцы использования этого скрипта, когда я снова работаю над приложениями для iPhone с несколькими другими разработчиками.
Другой вариант (указанный в комментариях ниже), который вы можете попробовать использовать вместо скрипта, - это добавить эту строку в файл .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Тогда git всегда будет использовать обе стороны слияния файлов .pbxproject, имея тот же эффект, что и предоставленный мной скрипт, только без дополнительной работы.
Наконец, вот мой полный файл .gitignore, показывающий, что у меня есть, он настроен на игнорирование, так как есть несколько вещей, которые вам не нужны - в моем случае действительно просто остатки emacs и весь каталог сборки:
# xcode noise
build