山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

iosアプリ開発でのコンフリクト問題

iPhoneアプリを開発してgitでバージョン管理しています。開発はほぼ2人だけでやっているにも関わらずproject.pbxprojというファイルがやたらとコンフリクトします。どうもこのファイルは全部のファイルのリストを持っているようです。そりゃコンフリクトしますね。自動的に作成変更されるファイルなのでコンフリクトしたからマージしろと言われても困ります。

ネットを調べてみるといくつか対応方法があるようです。このファイルをバイナリファイル扱いにする方法。常に全部上書きされてしまうのでしょうか。それは困ります。マージ方法をunionに指定する方法。これはまあまあいけそうです。ファイル名を変更したときは手動対応が必要そうです。その情報共有は結構厄介そうです。

GitHub上に自動的にマージするツールがありましたので使ってみました。mergepbxというプログラムです。

mergepbx

使い方はREADMEにあるとおりですが実際のコマンドを列挙しておきます。
git clone https://github.com/simonwagner/mergepbx
cd mergepbx/
./build.py
sudo cp mergepbx /usr/local/bin/
vi ~/.gitconfig 
以下を追加
#driver for merging XCode project files
[merge "mergepbx"]
name = XCode project files merger
driver = mergepbx %O %A %B
ローカルのgitリポジトリのルートディレクトリで以下のファイル作成
ファイル名 .gitattributes
内容
*.pbxproj merge=mergepbx

Xcodeでpullしたらmergepbxが起動せずコンフリクトになってしまいました。ターミナルでコマンドでpullしたところうまくいきました。

なおこのツールでもファイル名変更と同じファイルの削除を別々の人が同時に行うとうまく処理できないそうです。そもそもこのファイルの存在複数人で開発するときに思い切りボトルネックになります。アップルさん何とかしてください。