taoru's memo

Objective-c,cocos2d,など開発についてのメモ(andoroidも少しだけ)

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を削除することに…

何か良い解決策はないだろうか。

QLOOKアクセス解析