2つのテキストからUnified Diffを生成する

Diff生成モードを使って2つのバージョンのテキストからUnified Diffを作成します。LCSアルゴリズムが最小限の変更を計算する仕組みを学びます。

Common Use Cases

詳細な説明

Unified Diffの生成

Diff生成モードは2つのテキストを受け取り、共有、他の場所での適用、参照用の保存が可能なUnified Diffを生成します。

使い方

  1. Diff生成モードに切り替え
  2. 左パネルにオリジナルテキストを貼り付け
  3. 右パネルに変更後テキストを貼り付け
  4. Diff生成をクリック
  5. 生成されたUnified Diffをコピー

オリジナル:

def hello():
    print("Hello, World!")

def main():
    hello()

変更後:

def hello(name="World"):
    print(f"Hello, {name}!")

def goodbye(name="World"):
    print(f"Goodbye, {name}!")

def main():
    hello("Alice")
    goodbye("Alice")

生成されるDiff:

--- a/original
+++ b/modified
@@ -1,5 +1,9 @@
-def hello():
-    print("Hello, World!")
+def hello(name="World"):
+    print(f"Hello, {name}!")

+def goodbye(name="World"):
+    print(f"Goodbye, {name}!")
+
 def main():
-    hello()
+    hello("Alice")
+    goodbye("Alice")

LCSアルゴリズム

Diffジェネレーターは最長共通部分列(LCS)アルゴリズムを使用して最小限の変更セットを計算します:

  1. すべての行を比較する動的計画法テーブルを構築
  2. テーブルを逆追跡して共通行を特定
  3. LCSに含まれない行は追加または削除
  4. 周囲のコンテキスト行とともに変更をHunkにグループ化

コンテキスト行

デフォルトで生成されるDiffは各変更の前後3行のコンテキストを含み、diff -uの標準と一致します。

ユースケース

共有設定ファイルに変更を加え、差分のみをチームに送信する必要があります。ファイル全体を送る代わりにUnified Diffを生成し、受信者は変更のみを適用できます。

試してみる — Diff Patch Applier

フルツールを開く