Trabalhei em aplicativos para iPhone em tempo integral desde o lançamento do SDK, a maior parte desse tempo trabalhando em equipes com vários desenvolvedores.
A verdade é que é muito mais prejudicial impedir a mesclagem desse arquivo .pbxproj do que útil. Como você disse, quando você adiciona um arquivo, a menos que outras pessoas o obtenham, elas também têm que adicioná-lo ao projeto - em um aplicativo de qualquer tamanho, isso é uma merda e também tira um grande benefício do controle do código-fonte, pois você não pode realmente reverter para um estado de projeto anterior completo apenas por meio do git.
O arquivo .pbxproj é simplesmente uma lista de propriedades (semelhante ao XML). Por experiência, o ÚNICO conflito de mesclagem que você teve é se duas pessoas adicionaram arquivos ao mesmo tempo. A solução em 99% dos casos de conflito de mesclagem é manter ambos os lados da mesclagem, o que para o git pelo menos envolve simplesmente a remoção de quaisquer linhas >>>>, <<<< e ====. Na verdade, isso é tão comum que criei um script de shell simples para corrigir um arquivo .pbxproj em um estado de mesclagem do git. Eu o executo de dentro do diretório do projeto (no nível 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
No pior caso, se ele falhar (você pede ao XCode para carregar o projeto e ele falha ao carregar), você simplesmente exclui o arquivo .pbxproj, verifica o master no git e adiciona novamente seus arquivos. Mas isso nunca aconteceu em muitos meses de uso com este script, novamente trabalhando em tempo integral em aplicativos para iPhone com vários outros desenvolvedores.
Outra opção (apontada nos comentários abaixo) que você pode tentar usar no lugar do script, é adicionar esta linha a um arquivo .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Então o git sempre pegará os dois lados de uma fusão para os arquivos .pbxproject, tendo o mesmo efeito que o script que forneci, mas sem nenhum trabalho extra.
Por último, aqui está o meu arquivo .gitignore completo, mostrando o que eu tenho configurado para ignorar, pois há algumas coisas que você não quer - no meu caso, apenas restos do emacs e todo o diretório de construção:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile