Diff
GNU diffの大半のバージョンでは、Rにおいてsがデフォルトの1である場合にはカンマ以降を省略した形式も使える。
元ファイルの変更箇所の範囲を示す情報では非変更箇所行・削除行についての行数分も含んだ情報が提示される。一方、変更後ファイルにおける範囲情報でも非変更箇所行・挿入行の分も含んだ情報が出力される。変更箇所における行数と範囲情報が示している行数が一致しない場合、その出力は不正な形式として拒絶される。
ある行が変更された場合、削除+挿入として表現される。元ファイルと変更後ファイルの変更箇所が同一の場所に現われ相互に隣り合って出力されることになる。以下のその一例を示す。
diff -u original newというコマンドを実行した際は、以下のような出力が行われる。:
diff出力形式の中には特定のプログラムや一定の利用法の中で変更や拡張が加えられているものもある。例えばバージョン管理システムでは、diffのヘッダ出力部分のタイプスタンプの箇所に版番号・バージョン番号や「ワーキングコピー」その他のコメント類を出力する場合もある。また複数のdiff出力を一つにまとめた形式が使えるものもある。この場合各変更ファイルのヘッダとして以下のような形式が使われる。:
「コンテキスト形式」の出力では変更された行部分に加えてその前後の変更されていない数行も示される。この呼称は、変更されていない行を加えることが「文脈(コンテキスト)」をパッチに与えることによる。この出力形式がpatchプログラムへの入力として使用される。また人間にとってもこの形式は読みやすく、パッチの適用にも適している。2ファイル間で変更のなかった箇所の行も出力されるため変更後のファイルでの変更箇所を特定するのが容易になる。これにより行番号の対応が取れなかったとしても変更点を追いやすくなり、変更を適用すべきかどうかの判断も行いやすくなる。
「変更内容の出力部」の上下に出力される変更のなかった行を何行分表示されるかはユーザが指定でき、全く出力しない「0」指定も可能であるが、標準では3行が出力される。
両者とも1981年以前にベル研外で開発されたものである。
Berkeley distribution of Unix ではコンテキスト形式(-C)の追加とファイルシステム中のディレクトリ構造を辿る機能(-r)が加わった。これらの機能は1981年7月にリリースされた2.8BSDから加わった。とりわけバークレーでコンテキスト形式が開発されたことによって、微細な変更が行われただけのソースコードへの改変をパッチの形で配布するような活動ができるようになった。
diff3コマンドは1ファイルを他の2つのファイルと比較する。これは1つのソースファイルを2人の人が変更したものを処理するためポール・ジェンセンが最初に開発した。直接実行されることはあまりなく大半はmergeプログラムから呼び出されて起動される。同様に、他の多くの履歴管理システムでも内部的に使われている。
Wdiffはテキスト中の単語単位・フレーズ単位での変更を見るためのツールであり、特に行折り返しや表幅などに相違がある場合に効果を発揮する。Spiff はさらに、浮動小数の精度桁数の違いやプログラムファイルでの空白やコメントなどを無視した比較ができる。