開発者ツール · テキスト比較
2 方向の差分と 3 方向のマージ: 比較がマージと同じではない理由
· 背景
テキストの差分 マージ競合 バージョン管理
2 つのバージョンの比較と、共通の祖先を共有する 2 つのバージョンのマージの違い、および競合マーカーが存在する理由について説明します。
2 人が同じファイルを編集しました。さてどうするでしょうか? — 両側が変更された場合の 2 つのバージョンの比較の制限から始まります
2 人が 1 つのファイルを編集する場合、最終状態を比較すると違いはわかりますが、祖先はわかりません。双方向の差分には、どちらの側が特定の元の行を変更したかを判断するために必要な共通の基盤がありません。調査をサポートできますが、マージの決定を下すことはできません。
ToolAcre は、Original と Changed という 2 つの文字列を受け入れます。スワップすると視点が逆転します。履歴は追加されません。ベース、私たち、そして彼らのワークフローを必要とするワークフローは、個別の比較を通じてそれらの状態を提供するか、本物の 3 方向マージ エンジンを使用する必要があります。
双方向の差分は 1 つの質問に答えます。つまり、比較によってどちらが勝つかではなく、何が異なるかがわかるということを言い換えます。
双方向比較により、選択された大文字と小文字と空白のオプションに基づいてどの順序付けられた行が異なるかがわかります。行は等しいか、削除または追加されます。その結果には、どちらかが新しい、権威がある、または正しいというものは何もなく、勝者を選択する操作もありません。
この制限は、両側が同じ領域を編集した場合に重要になります。左側にのみ存在する行は、時代遅れの削除ではなく、価値のある新しい変更である可能性があります。基礎的な証拠がなければ、方向性ラベルは開発年表ではなく、比較の観点を説明します。
共通の祖先がすべてを変える — 基本バージョンによってマージ ツールが一方の変更を他方の変更からどのように判断できるかを説明します
共通の祖先により、マージ システムは基底から左へ、および基底から右へ比較できるようになります。 1 つの子孫のみが領域を変更する場合、その変更はきれいに結合される可能性があります。両方が互換性のない編集を行った場合、システムは人間による解決のための競合を表面化する可能性があります。
ToolAcre には 3 番目の入力やマージ アルゴリズムがありません。ベースと 1 つのブランチを貼り付け、行を記録し、他のブランチでも同じ手順を繰り返すことができます。この手動分析は理解には役立ちますが、バージョン管理のすべての配置ルールと競合ルールを再作成するわけではありません。
デコードされた競合マーカー — <<<<<<<、 ======= および >>>>>> セクションとそれらの間の内容について説明します
山括弧ブロックなどの競合マーカーは、ここに貼り付けられるとリテラル テキストになります。 Text diff は、マークされたファイルを提案された解決策と比較できますが、セクションを私たちのもの、ベースのもの、または彼らのものとして解析しません。マーカーを削除したり、コンテンツを選択したりすることはありません。
権限のあるリポジトリ内の競合を解決します。ファイル名、祖先、テストは利用可能なままです。ブラウザ ツールは、マテリアルが貼り付けに適している場合に、簡単な文言チェックにのみ使用してください。見た目にきれいな結果は、マージされたプログラムが正しく動作することを証明するものではありません。
動作した例: 1 つのクリーンなハンクと 1 つの競合を含むマージ — ベース、2 つの編集、およびその結果の出力を順に見ていきます。
ベースライン `color=blue` および `limit=10` から始めます。 1本の枝の色が変わります。別の変更制限。ベースとブランチの比較では独立した行が明らかになり、マージでは両方を保持できる可能性があります。両方が同じ制限を異なる方法で変更する場合、テキストの矛盾によりポリシーの決定が必要になります。
2 つのブランチ間の双方向比較では、両方の行が異なることが示されていますが、共有の開始値を推測できません。この欠落している事実こそが、比較がマージされない理由なのです。ベースを推論に追加し、選択した結合状態を実際のシステムでテストします。
双方向比較が引き続き役立つ場合 — ベースに対して各側を比較するか、マージされた結果を予想に照らしてチェックすることについて説明します。
双方向の差分は、競合解決後も引き続き役立ちます。マージされた抜粋を各ブランチと比較して、意図した貢献が残っていることを確認するか、予想される手書きの状態と比較します。空白文字や大文字小文字が言語に影響を与える可能性がある場合は、正規化をオフにしてください。
ダウンロードされたパッチ形状のストリームは各チェックを記録できますが、マージを適用したり検証したりすることはできません。元の行番号は貼り付けられた各状態にローカルであり、隣接する編集後のリポジトリの位置とは異なる場合があります。
これでカバーされないもの — ToolAcre のテキスト比較では 2 つのテキストを比較します。マージは実行されません。また、この投稿ではリベース戦略については説明しません。
ToolAcre は、マージ、リベース、競合の帰属、コミット履歴分析を実行しません。移動ブロックのラベルもセマンティックな理解もありません。これらは、他の場所に隠されたボタンが欠落しているのではなく、2 入力ライン コンパレータの明示的な結果です。
この記事では、分岐戦略についても規定していません。チームはリポジトリ管理、コードの所有権、テストゲートに従う必要があります。ブラウザ比較は補助的な検査対象であり、代替ソース管理システムではありません。
要点: 理解するために diff を行い、決定するためにマージ — 違いと、ブラウザーの比較が手動による競合解決にどのように適合するかを要約します。
テキストを理解するのが難しいです。マージして結合状態を決定します。 1 つ目は ToolAcre とペアで繰り返すことができますが、2 つ目は祖先、ポリシー、検証が必要です。これらの動詞を分離しておくと、明確な行表示が安全な統合であると誤解されるのを防ぎます。
競合を解決した後、実際のプロジェクトで構文チェック、テスト、ドメイン レビューを実行します。多くのマージにはテキストの合意が必要ですが、動作には決して十分ではありません。関連する行の違いが表示されると、ブラウザの役割は終了します。