Xcodeプロジェクトのgitignore設定とgitattributes設定
Xcodeプロジェクトをgit管理するとき、ユーザーデータやスワップファイルは無視させる。
こちはら使っていればすぐ.gitignore設定しなきゃ!って気がつくので問題があまりない。
しかし、これだけでは複数人開発をしたときに .pbxproj という拡張子のついたファイルがconflictを多発させる。
中身はJSONで記述されたXcodeのファイル管理情報で、1つでもファイルを追加したりXcode上で移動させればmodifiedとなるの。そのままcommitすれば、mergeやrebaseの際にconflictする。
この解決策は、.gitattributesを設定して.pbxprojファイルをbinaryとして扱うようにすればいいらしい。
.gitignore設定
Xcode and git: bridging the gap
上記サイトを参考に、git管理下のルートディレクトリに .gitignoreファイルを作成し記述する。
.gitignore
# OS X Finder .DS_Store # Xcode per-user config *.mode1 *.mode1v3 *.mode2v3 *.perspective *.perspectivev3 *.pbxuser *.xcworkspace xcuserdata # Build products build/ *.o *.LinkFileList *.hmap # Automatic backup files *~.nib/ *.swp *~ *.dat *.dep
.gitattributes設定
gitattiributesを設定して、.pbxprojファイルをバイナリとして扱うようにする。
そうすることで、conflictせずにautomergeされる(たぶん)
git管理下のルートディレクトリに、 .gitattributes というファイルを作成する。
.gitattributes
*.pbxproj binary -merge
binaryは Git 1.6系で定義されているマクロだそうで、
*.pbxproj -crlf -diff
と同義
"-crlf" は、Windows系の改行コードCRLFが混在していてもLFにconvertしたりして解決してくれるとかなんとか…(うろ覚え)
gitattributes(5) Manual Page
読み解くのに時間がかかる…
- 追記1
ファイル削除したときなどに、やっぱりpbxprojがconflictするしconflictメッセージも記述されなくて逆に不便になった…
引き続き調査を続行します。
How to use Git properly with XCode?
*.pbxproj text -crlf -diff -merge=union
上記サイトではこう記述していた。
- 追記2
しかしdelete情報があるとやはりconflict!と怒られる。
addばかりの時はよかったんだけど、renameすら正常にできなくて逆に効率落ちたので.gitattributesを削除することに…
何か良い解決策はないだろうか。