С момента выпуска SDK я работал над приложениями для iPhone большую часть времени, большую часть времени он проводил в командах с несколькими разработчиками.
Правда в том, что запретить слияние этого файла .pbxproj гораздо опаснее, чем полезно. Как вы говорите, когда вы добавляете файл, если другие люди не получают этот файл, они должны также добавить его в свой проект - в приложении любого размера, которое отстой, а также лишает вас огромного преимущества контроля исходного кода, заключающегося в том, что вы на самом деле не может вернуться к завершенному состоянию проекта только через git.
Файл .pbxproj - это просто список свойств (аналог XML). Исходя из опыта, примерно ТОЛЬКО конфликт слияния, который вы когда-либо получали, - это если два человека добавили файлы одновременно. Решение в 99% случаев конфликта слияния состоит в том, чтобы сохранить обе стороны слияния, что, по крайней мере, для git предполагает удаление любых строк >>>>, <<<< и ====. На самом деле это так часто, что я создал простой сценарий оболочки для исправления файла .pbxproj в состоянии слияния из git, я запускаю его из каталога проекта (на уровне классов): </p>
#!/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/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile