背景: git (またはその他の SCM) は、ストーリーボード、xib、および pbxproj ファイルを "正常に" マージできます。それらのコアは単なる xml です。通常の競合解決戦略で解決できる競合が発生することがあります。しかし、xib と Storyboards はかなり複雑なデータ構造のシリアル化された形式であるため、楽しみが始まります。
他のソース コードと同様に、マージが成功しても、マージされたすべての変更が正しく連動するとは限りません。問題のファイルを使用すると、git は正常にマージできますが、Xcode を開こうとすると「アーカイブを読み取れませんでした」というエラーが表示されることがあります。つまり、マージによって xib が破損しました。
git で .xibs を無視する (実用的ではありません)、または .gitattributes で設定して diff を無効にすることに関する提案を見てきました。
*.xib -crlf -diff
技術的には、マージの競合/破損した xib の問題は修正されましたが、誰かの変更が失われましたか?
同様に、私が見たプロジェクト ファイルの最良の推奨事項は、.gitattributes の merge=union です。
*.pbxproj merge=union
質問: かなり検索しましたが、適切な解決策がないようです。経験のある人は、いくつかのユースケースで何が起こるか教えてもらえますか?
プロジェクトでは、ファイルの名前を x から y に変更し、fileA を削除します。一方、別のプログラマーが、fileC を追加し、fileD を削除する変更をコミットしました。合流の結果は?実際のファイル システムの変更は正しいと確信していますが、Xcode ナビゲーター パネルでは次のように表示されます。
- x と Y の両方が表示されますか?
- 他のプログラマーの .pbxproj にまだあるため、fileA は再び表示されますか?
- .pbxproj にまだあるので、fileD はまだ存在しますか?
git が .xib ファイルを無視している場合、少なくともファイルが変更され、処理されていないという警告が表示されますか?