TOKOROM BLOG

iOSとかVimとかその他日々の雑多な技術情報

Xcodeのプロジェクトファイル(pbxproj)がコンフリクトしまくるのをなんとかしたい! はてなブックマーク - Xcodeのプロジェクトファイル(pbxproj)がコンフリクトしまくるのをなんとかしたい!

Permalink

2014/02/09 追記
コメントのところでやり取りしているようにmergepbxの作者さんから連絡があって、この記事で書いた問題が修正されました!
今現在は merge=mergepbx がいい感じになってきているのでそっちがオススメです。

複数人でプログラミングしているとpbxprojがやたらとコンフリクトする

例えば、

  • Aさんが AALabel.m をプロジェクトに追加して
  • Bさんが BBLabel.m をプロジェクトに追加して

とただそれだけなのにマージのときにコンフリクトするpbxprojさん。。。

ただそれぞれファイルを追加だけのことでコンフリクトするなんて…
どうにかならんもんかいとTwitterでつぶやいたところ、 @azu_re さんから有り難い教えが!

mergepbxを試してみる

まだα版ということだがせっかくなので試してみた。基本的には

https://github.com/simonwagner/mergepbx

のREADMEどおりにインストール&設定するだけ。

cloneして

1
$ ./build.py

すると、同ディレクトリに mergepbx というファイルができる。それをPATHの通った場所に設置する。

2014/02/09 追記
(もしくは自分でビルドしなくても https://github.com/simonwagner/mergepbx/releases から最新版をダウンロードすることも可能)

~/.gitconfig に以下の設定を追加する

1
2
3
[merge "mergepbx"]
  name = XCode project files merger
  driver = mergepbx %O %A %B

なお、LANG= ってところはREADMEには書かれていないのですが、ぼくの手元だと と日本語まわりでfailedになったので加えました。

2014/02/09 追記
mergepbxの最新版ではLANG=を指定しなくても問題が発生しなくなりました。

次に、.gitattributes

1
*.pbxproj merge=mergepbx

pbxprojのときはマージに mergepbx を使うように設定を追加という手順です。

mergepbxの結果

ストーリーとしては、

  • test1ブランチで 適当なファイルを1つ追加してコミット
  • test2ブランチで 別の適当なファイルを1つ追加してコミット
  • test1ブランチでgit merge test2

として、pbxprojが自動マージされるかどうかという確認をしたのですが、その結果、 と残念ながらうまく自動マージされませんでした。。。

どういうパターンで成功するのかは分かりませんがまだ実用的ではないかんじです。

ただ、READMEの次の項に、 *.pbxproj merge=union が使えるんだったらそれもいいかもよという記述が…

2014/02/09 追記
mergepbxの最新版ではこのケースがうまく自動マージされるようになりました。cool :)

まとめ

ということで、今のところ merge=union を使うのが良さそう。

100%うまくいくわけではないけど、一番多く発生する両方で追加するパターンは自動マージされるようになるため、対応コストは確実に低くなると予想しています。

2014/02/09 追記
mergepbxの最新版(0.5以降)を使いましょう!

(まだ少し検証した程度なのでしばらく使ってみます)

Comments