開発者ツール · テキスト比較
統合差分を読み取る方法: ハンク ヘッダー、コンテキスト行、および +/- マーカー
· 背景
テキストの差分 パッチ 開発者ワークフロー
ファイル ヘッダーや @@ ハンク範囲からコンテキスト行や変更マーカーに至るまで、統一された diff 形式を 1 行ずつデコードするため、どのツールからのパッチも意味を持ちます。
プラス、マイナス、@@ 記号の壁 — 電子メールまたはプル リクエストでパッチに初めて遭遇すると始まります
ダウンロードされた `changes.patch` は、おなじみの差分出力に似た句読点で始まりますが、その正確な構造が重要です。 ToolAcre は 2 つのラベルを書き込み、次にすべての比較行に 1 文字のマーカーを書き込みます。存在するものを読み取ることは、別のパッチ形式からフィールドを頭の中で供給するよりも安全です。
プレーンテキスト エディターでファイルを開きます。最初の 2 行は、UI によって提供される左右のラベルを `original` および `changed` として識別します。後続の行では、コンテキスト、削除、および追加マーカーを通じて比較されたテキストが再構築されます。
ファイル ヘッダー行 — --- 行と +++ 行、パス、および a/ および b/ プレフィックス ツールが追加するものについて説明します。
ヘッダーは `--- original` の後に `+++ changed` が続きます。他のツールでは、これらのプレフィックスはより豊富なパッチ文法内に存在する場合がありますが、このエクスポーターはタイムスタンプ、パス、メタデータを追加しません。ラベルはディスク上に存在することが証明されているファイルではなく、側面を説明します。
Text diff はファイル オブジェクトではなく貼り付けられた文字列を受け入れるため、この区別は重要です。ダウンロードすると、比較後にローカルのテキスト レポートが作成されます。ラベルをリポジトリ パスまたはリビジョン識別子として扱うと、UI が決して収集しなかった出所が特定されてしまいます。
ハンク ヘッダーの説明 — @@ -12,7 +12,8 @@ を開始行と各サイドの行数としてデコードします
`toUnifiedText` には `@@` で始まる行はありません。この関数は、2 つのラベルの後のすべての行に直接マップします。したがって、この出力にはデコードするハンク範囲がなく、ダウンロードされたテキストに埋め込まれた start-line/count ペアもありません。
行番号は、レンダリングされたブラウザー ビューでも引き続き使用でき、行は左右の位置を保持します。エクスポートでは、より単純な表現が選択されます。ダウンストリーム プログラムが標準に準拠した統合ハンクを必要とする場合は、`.patch` 拡張機能が不足している構文を提供すると仮定するのではなく、互換性を確認してください。
ToolAcre は @@ ハンク ヘッダーを発行しないため、デコードするものはありません
先頭のスペースは変更されていない行を示し、マイナスは左側の削除を示し、プラスは右側の追加を示します。 UI は長い等しい実行を視覚的に折りたたむことができますが、`lastDiff` は完全な結果を保持し、ダウンロードによりすべての行がシリアル化されます。パッチ文字列にはスキップマーカーは入りません。
アウトラインには、デフォルトとして 3 つのコンテキスト行が記載されています。 3 は、エクスポートではなく、ビジュアル折りたたみ呼び出しによって使用されます。これらのパスを混同すると、ダウンロードされたコンテンツが過小評価されてしまいます。プレゼンテーションとシリアル化は行を共有しますが、異なる変換を適用します。
ダウンロードではすべての行にマークが付けられ、デフォルトの 3 行コンテキストは使用されません。
左を比較 `a b` with right `a c`. The exported lines are the two labels, then space-a, minus-b and plus-c. Reading top to bottom says that `a` survives, `b` leaves the original and `c` が変更された側に入ります。
したがって、変更は、位置合わせによってそれらが一緒に配置される場合、隣接する削除と追加として表されます。フォーマットでは「変更済み」という名前は付けられていません。繰り返し行で別の位置合わせができる場合、各入力行を考慮しながらシーケンスが異なって見える可能性があります。
作業例: ToolAcre が実際にエクスポートする完全なパッチ形状のストリームを読み取ります。
通常、コンテキスト、および完全な統合 diff 形式には独自の仕様と履歴がありますが、それらはここで使用されるソース セットによって実装または文書化されていません。この記事では、ある形式が普及した理由や、ToolAcre が出力しないフィールドのリストについては主張しません。
別のツールでパッチを適用する必要がある場合は、バージョン管理コマンドを使用します。 ToolAcre のダウンロードは、ポータブルなレビュー アーティファクトとして役立ちますが、リポジトリには、任意のパッチ コンシューマをラウンドトリップできることを証明するパッチ パーサーや適用関数が含まれていません。
完全に統一されたコンテキストおよび通常の形式の比較には外部ソースが必要です
バイナリ パッチ、ヘッダー名の変更、モードの変更、およびアプリケーションはこのルートの外にあります。テキストにはオブジェクト識別子や共通祖先が含まれていません。マーカーが見覚えがあるという理由だけで、リポジトリ操作を表すことはできません。
エクスポータには、アクティブな比較オプションも反映されます。大文字と小文字または空白の正規化後に等しいとみなされた行には、元の左側のテキストのみが含まれるため、パッチ状のドキュメントは、緩いマッチングの下で両方の入力をバイトごとに再構築したものではありません。
要点: 差分は圧縮されたストーリーです — 読む順序を要約し、ToolAcre のテキスト比較で同じ種類の変更が強調表示された行とどのように表示されるかを簡単に確認できるようにメモします。
最初に 2 つのラベルを読み取り、次に接頭辞が付いたすべての行を順番に解釈します。行番号を表示する必要がある場合は、ブラウザ ビューに戻ります。標準に準拠したハンクが必要な場合は、その契約を文書化するツールを使用してハンクを生成します。
ToolAcre は、すべてのパッチ機能を実装すると主張せずに、ページの外で比較を行うためのコンパクトな方法を提供します。この狭い名前 (パッチ形式の出力) により、期待を正確な機能と一致させ、アプリケーションの互換性についての誤った約束を回避します。