私は、SDKのリリース以来、iPhoneアプリケーションにフルタイムで取り組んできました。そのほとんどの時間は、複数の開発者がいるチームでの作業に費やされていました。
真実は、その.pbxprojファイルのマージを禁止するほうが、役立つよりも害が大きいということです。あなたが言うように、他の人がそのファイルを取得しない限り、あなたがファイルを追加するとき、彼らは彼らのプロジェクトにもそれを追加しなければなりません-どんなサイズのアプリケーションでも、それは面倒で、それはあなたのソースコード管理の大きな利点も奪いますgitだけでは、以前の完全なプロジェクト状態に戻すことはできません。
.pbxprojファイルは、単なるプロパティリストです(XMLに似ています)。経験上、2人が同時にファイルを追加した場合に発生するのは、マージの競合のみです。マージの競合の99%での解決策は、マージの両側を維持することです。gitの場合、少なくとも>>>>、<<<<、====の行を削除するだけです。実際、これは非常に一般的なので、gitからマージ状態の.pbxprojファイルを修正するための簡単なシェルスクリプトを作成しました。これをプロジェクトディレクトリ(クラスレベル)内から実行します。
#!/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