8

背景: git (またはその他の SCM) は、ストーリーボード、xib、および pbxproj ファイルを "正常に" マージできます。それらのコアは単なる xml です。通常の競合解決戦略で解決できる競合が発生することがあります。しかし、xib と Storyboards はかなり複雑なデータ構造のシリアル化された形式であるため、楽しみが始まります。

他のソース コードと同様に、マージが成功しても、マージされたすべての変更が正しく連動するとは限りません。問題のファイルを使用すると、git は正常にマージできますが、Xcode を開こうとすると「アーカイブを読み取れませんでした」というエラーが表示されることがあります。つまり、マージによって xib が破損しました。

git で .xibs を無視する (実用的ではありません)、または .gitattributes で設定して diff を無効にすることに関する提案を見てきました。

*.xib -crlf -diff

技術的には、マージの競合/破損した xib の問題は修正されましたが、誰かの変更が失われましたか?

同様に、私が見たプロジェクト ファイルの最良の推奨事項は、.gitattributes の merge=union です。

*.pbxproj merge=union

質問: かなり検索しましたが、適切な解決策がないようです。経験のある人は、いくつかのユースケースで何が起こるか教えてもらえますか?

  1. プロジェクトでは、ファイルの名前を x から y に変更し、fileA を削除します。一方、別のプログラマーが、fileC を追加し、fileD を削除する変更をコミットしました。合流の結果は?実際のファイル システムの変更は正しいと確信していますが、Xcode ナビゲーター パネルでは次のように表示されます。

    • x と Y の両方が表示されますか?
    • 他のプログラマーの .pbxproj にまだあるため、fileA は再び表示されますか?
    • .pbxproj にまだあるので、fileD はまだ存在しますか?
  2. git が .xib ファイルを無視している場合、少なくともファイルが変更され、処理されていないという警告が表示されますか?

4

1 に答える 1

1

.gitattributes最近では、プロジェクト ファイルや nib に特定のものを設定することはありません。

Xcode プロジェクトと xib/ストーリーボードへの同時変更をマージする際の問題は、複数の開発者がいるすべてのチームに存在します。

Xcode プロジェクト

Xcode プロジェクトの競合に対処するためのいくつかのトリック:

  • マージの片側を取り、マージ後に他の変更を手動で適用します。ファイルを削除した場合は赤で表示され、追加する必要がある場合は追加できるようになります。
  • ファイルをターゲットに追加すると、「ソースのコンパイル」ビルド フェーズの最後に追加されます。このリストのランダムな位置に他の人をドラッグして、他の人との衝突を避けてください。
  • ビルド設定セクションではなく、.xcconfigファイルを使用してプロジェクトを構成します。構成ファイルは簡単にマージできます。

疑わしい場合の私の最善のアドバイスは、マージの一方の側を取り、リラックスして、追加を再生することです.

XIB とストーリーボード

XIB (およびそのためのストーリーボード) の形式は、ここ数か月で大幅に変更されました。追加のオブジェクトがファイルの内部コレクションに追加され、マージが簡単にできることがわかりました。同じオブジェクトに変更を加えている場合は、そこに手動でアクセスする必要がある場合があります。

Itty Bitty Apps からのこの投稿は、主な変更点を強調しています。

この新しい XIB XML 形式には、次のようなさまざまな利点があります。

  • XIB ははるかに小さい (コードの行数が少ない)。
  • 開発者は簡単に XML を読み、ユーザー インターフェイスで何を指定しているかを理解できます。
  • XIB をマージしても、XIB が破損する可能性が大幅に低くなりました。以前は、XIB やストーリーボードをマージしようとすることさえめったにありませんでした。
于 2013-12-08T00:43:22.723 に答える