[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
diff
の性能のトレードオフ
GNU diff
は効率的に動作します.しかし,状況によってはより
速く,より小さな変更の組を生成させることが可能です.
diff
の効率を改善する方法の一つは,コピーの代わりにハードリンク
やシンボリックリンクを使用することです.diff
は通常,同じファイ
ルへの二つのハードリンクやシンボリックリンクは内容が同じはずなので読み込
む必要がないため,これで効率が改善します.例えば,大きなディレクトリ階層
をコピーして,コピーに対しいくつか変更して,そしてオリジナルとコピーを比
較するのに`diff -r'を使用することが多いと仮定します.オリジナルのファ
イルが読み込み専用の場合,ハードリンクやシンボリックリンクを使用してコピー
を作成する(例えば,GNU `cp -lR'や`cp -sR'を用いる)ことで,
効率をかなり改善することが可能です.コピーのファイルを最初に編集する前に,
リンクを切って,通常のコピーで置換すべきです.
ファイル比較の方法を変更するオプションを与えることで,GNU
diff
の効率に影響を与えることも可能です.これらのオプションは,
他のものを犠牲にして効率改善の見地で実装されていたり,他のものに害を与え
ながら,場合によっては効率を改善したりします.
GNU diff
が変更された行を決定する方法は,常に最小限の差異
の集合で見つけ出します.通常それは,実用的な目的としては十分です.
diff
の出力が大きい場合,より小さな差異の集合を生成するために,
diff
を修正されたアルゴリズムで使用したいかもしれません.
`-d'や`--minimal'でこうなります.しかし,通常は
diff
の実行が遅くなるので,デフォルトの動作ではありません.
比較しているファイルが大きく,全体を通じて変更部分の小さな集合が点在して
いるとき,diff
が使用するアルゴリズムとは異なる変更を行なう,
`--speed-large-files'を使用することも可能です.入力ファイルが一定
して小さな密度で変更されているとき,このオプションで出力を変更することな
く比較の速度が向上します.そうでない場合,diff
は大きな差異の組
を生成するかもしれません.しかし,出力は正しいままです.
通常diff
は,差異部分の最小組を見つけようとする前に,両方のファ
イルに共通な最初の部分と終りの部分を破棄します.これでdiff
の実
行は速くなりますが,最小の出力ではなくなることもあるでしょう.
`--horizon-lines=lines'オプションは,diff
が最初の
部分の最後のlines行と終りの部分の最初のlines行を破棄すること
を妨げます.これで,diff
はより最小の出力を見つけることになるで
しょう.
変更された行に連続する行が含まれていて,それ以外では同一行が連続している
と仮定してください.diff
コマンドは,hunkに含まれてる連続した同
じ部分を自由に選択します.この場合,diff
は通常,隣接するhunkを
マージするときはhunkの境界の位置を変更したり,hunkの行をファイルの終りま
で位置を変更したりします.hunkのマージは出力行の見栄えを良くすることもあ
るはずです.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |