このページの内容

1.1 差分のまとまり(hunk)

2つのファイルを比較するとき、diffは両方に共通する行の連なりを見つけます。その間には、hunkと呼ばれる異なる行のまとまりが挟まれます。2つの同一ファイルを比較すると、異なる行がないため、共通する行の連なりが1つ見つかり、hunkはありません。完全に異なる2つのファイルを比較すると、共通する行はなく、両方のファイルの全行を含む大きなhunkが1つできます。一般に、与えられた2つのファイルの行を対応付ける方法は複数あります。diffは、異なる行の小さなhunkに挟まれた、共通する行の大きな連なりを見つけることで、hunkの総量を最小にしようとします。

たとえば、ファイルFに「a」「b」「c」の3行があり、ファイルGには同じ3行が逆順の「c」「b」「a」で並んでいるとします。diffが「c」の行を共通と判断すると、コマンド「diff F G」は次の出力を生成します。

1,2d0
< a
< b
3a2,3
> b
> a

一方、diffが代わりに「b」の行を共通と判断すると、次の出力になります。

1c1
< a
---
> c
3c3
< c
---
> a

「a」を共通の行と判断することもできます。diffは、常にファイル間の最適な対応付けを見つけるとは限りません。実行を速くするために簡略化することがあるからです。ただし、通常、その出力は最短の出力に近いものになります。--minimal(-d)オプションでこの兼ね合いを調整できます(diffの性能上のトレードオフを参照)。