135

ストーリーボードは、複数の人が共同で作業している場合、Git ワークフローの観点から見るとむしろ王様の苦痛です。たとえば、.storyboard ファイル内の XML には、最新のファイル マニピュレータがたまたま実行されている構成によって変更された開始<document>タグtoolsVersionと属性があります。systemVersion全員の Xcode のバージョンを正確に同期するとtoolsVersionsystemVersion.

これはばかげていますが、ほとんど無害です。しかし、私たちが心配しているのは、git pull. つまり、アリスはストーリーボードに変更を加え、コミットしてリポジトリにプッシュします。次に、ボブはアリスの変更をプルし、ストーリーボードを開いてさらに変更を加えます。彼がストーリーボードを開いた瞬間、ファイル アイコンはすぐに変更されたが保存されていない状態にgit status変わり、いくつかの奇妙な変更が発生したことが示されます。ボブが何も変更したり、ファイルを自分で保存したりすることなく、これらすべてが行われました。

<classes>最も一般的な自動化された変更は、ストーリーボード ファイルの末尾付近でタグ階層全体が消失または再出現することです。何が原因なのかはわかりません。さまざまな .lproj ディレクトリにストーリーボードのローカライズされたバージョンがいくつかある場合があり、それらを Interface Builder 内で開くと、クラス階層が自発的に一部から削除されて別のディレクトリに追加されたり、別のディレクトリにそのまま残されたりする場合があります。これにより で多くのノイズが発生しますがgit diff、実際には機能が損なわれることはありません。多くの場合、行った実際の変更を git のインデックスに選択的に追加し、それらをコミットしてから、自発的で無意味なものを破棄します。<classes>変化します。これは、コミットを小さく適切に保つためです。ただし、最終的には、Xcode が変更をやり直し続け、誰かが他のものと一緒にそれらを ragecommit するため、煩わしくなりすぎます。明らかな理由。(私たちのコミット履歴には、これについて多くの悪口があります。)

他の誰かがこの動作を見ていますか? これは Xcode のバグですか、それとも 1 つまたは複数の開発者用 Mac の構成の問題ですか? XIB ファイルとの共同作業で同様の動作が見られましたが、ストーリーボードはこれの影響を受けやすいようです。

4

6 に答える 6

80
于 2013-08-28T09:57:44.827 に答える
19

これはXCode4.5以降のバグです。修正されることを願っています。もちろん、PITAです。

これがAppleの完全なバグです

ストーリーボードファイルへのXcodeの不必要な編集を回避する方法は?

于 2012-11-05T13:36:40.200 に答える
11

git add -pこの問題は、ストーリーボード、XIB、Core Data モデル、プロジェクト ファイルなど、Xcode で生成されたファイルを非常に慎重に使用することで多少軽減できます。これらのファイルはすべて、実際のインターフェイス/モデル/に影響を与えない同様の一時的な変更の影響を受けます。事業。

ストーリーボードで見た最も一般的ながらくたの変更は、システムのバージョン番号 (あなたが言及したように) と、<classes>セクションの絶え間ない追加と削除です。XIB の場合は<reference key="NSWindow"/>、Cocoa Touch のクラスでさえない の追加と削除です。うわー。

海のようなものだと考えてください。満潮と干潮の両方があります。洗い流してください。

ああ。それでおしまい。

変更をステージングするときにこれらの変更を無視し、不要な変更をリセットして、クリーンなコミットを行うことができます。

技術的な観点から見た、XIB に対するストーリーボードの唯一の利点は、競合するストーリーボードのマージを拒否するように Apple がまだ FileMerge を中和していないことです。(FileMerge は以前は XIB をマージできましたが、新しいバージョンではそれができませんでした。Thxxxx みんな !!!)

http://bugreporter.apple.com/で、これらすべての問題について多くのバグを報告してください。OpenRadarでエントリを作成することを忘れないでください。

于 2012-11-20T14:28:29.130 に答える
6

この状況が大幅に改善されたため、ここで別の回答を投げかけます。StoryBoard を表す XIB ファイルの XML が大幅に簡素化されました。

私は最近、弾丸を噛んで、Xcode でソース管理へのインターフェイスを使い始めました。私は何年もコマンドラインを使っていて満足していますが、インターフェイスは素晴らしく、コミットを分割できます。これは、コミットにリンクするチケットシステムを使用する場合に非常に重要です.

とにかく、今日、ストーリーボードに変更があり、組み込みの diff で、それがドキュメント タグ (systemVersion) の単一の属性であることがわかりました。大したことではありません。

私は、マージの問題が原因で SB がチームで非合法化されたと人々が言う記事を読んだことがあります。完全な狂気。特にインテリジェントな自動レイアウトが組み込まれているので、それらを使用していない場合は本当に見逃しています.

于 2013-11-01T18:14:13.497 に答える
3

なぜこの異常事態が発生しているのかを知ることは役に立ちますが、プロジェクトに警告が表示されないようにすることを信じており、プロジェクトを正常な状態に戻すために手早く汚れを落としたいだけの場合は、次のようになります。

  1. 明示的に指示されるまで、何もコミットしないでください。

  2. Xcode を開き、新しいストーリーボードを作成します (Command+N > iOS > ユーザー インターフェイス > ストーリーボード)。のデフォルト名と呼ぶことにしますStoryboard.storyboard

  3. Xcode が違反したストーリーボードを開きます。これは であると仮定しますBase.lproj/Main.storyboard

  4. ストーリーボードのすべてを選択してコピーします (Command + A、次に Command + C)。

  5. 開くStoryboard.storyboard

  6. すべてをコピーして に貼り付けますStoryboard.storyboard

  7. Xcode を閉じます。

  8. ターミナルを開き、ディレクトリをリポジトリに変更します。

  9. ( )Main.storyboardに置き換えます。Storyboard.storyboardmv Storyboard.storyboard Base.lproj/Main.storyboard

  10. git add Base.lproj/Main.storyboard; git commit -m "Fix Xcode's insanity."

  11. project.pbxprojvia への変更は無視してgit checkout -- project.pbxprojください。ファイルgit diffを見ると、一時的なストーリーボード (もう存在しない) に関する情報が追加されていることがわかります。

  12. Xcode のバックアップを開き、警告が消えていることを確認します。

  13. 息。

于 2015-07-11T16:26:05.477 に答える