複数名で iOS のプロジェクトを弄ると project.pbxproj
ファイルが頻繁にコンフリクトを起こすのでストレスフルである。このファイルを自動でマージしてくれるツール mergepbx
が存在するので、これを導入して精神の安寧を得ようと図る。このツールはリポジトリを使うメンバー全員が導入する必要はなく、自分だけが導入することもできるので、導入障壁はわりかし低い。
導入は以下の手順で行う。
$ git clone https://github.com/simonwagner/mergepbx $ cd mergepbx/ $ ./build.py $ sudo cp mergepbx /usr/local/bin/ $ vi ~/.gitconfig
[merge "mergepbx"] name = XCode project files merger driver = /usr/local/bin/mergepbx %O %A %B
driver
の設定でフルパスを指定しているのは、公式ページにあるようにコマンド名のみを指定する方法では SourceTree から mergepbx
を起動できなかったからである。mergepbx: command not found
と表示された。CLI の git
からだとコマンド名のみの設定のままで mergepbx
を起動できるので原因は不明。おそらく PATH まわりだと思うけれど。
git リポジトリのルートに .gitattributes
を作成して下記を追加。もしくはこの設定をリポジトリで共有したくない場合は .git/info/attributes
に記述。
*.pbxproj merge=mergepbx
以上の設定を行ったのちに SourceTree を用いて merge したところ、下記のような出力を得た。ちゃんと merge されているようだ。
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree merge --no-commit feature/Testmerge2 Automatic merge went well; stopped before committing as requested Auto-merging proj.ios_mac/nmd.xcodeproj/project.pbxproj Completed successfully