ふたつのプロジェクトツリー(普通は同じプロジェクトになりますが)を比較 して、その間で正確には何が変更されたかを明らかにするのが非常に役に立つこと がよくあります。
チェンジセットは、archの非常に中心的な概念です。— arch の大部分はチェンジセットに関係した操作として定義 されています。
「古いツリー」 と 「新しいツリー」 の間のチェンジセットがある場合、 「そのチェンジセットを」 古いツリーに適用して 新しいツリーを得ることができます。— 言い換えると、チェンジセットに 記述されている修正点の編集作業を自動的にやることができます。 もし第三のツリーがあるなら、やはりそのパッチを適用して、第三のツリーに 対しても近似的に同じ変更を得ることができます。
arch はチェンジセットを作ったり適用したりするための 洗練されたツールを用意しています。
mkpatch は二つのツリー間の差分を記述するようなチェンジセットを 計算します。この基本的なコマンドの構文は:
% larch mkpatch ORIGINAL MODIFIED DESTINATION
これで、ORIGINAL と MODIFIEDのツリーが比較されます。
mkpatch は新しいディレクトリであるDESTINATIONを作り チェンジセットをそこに格納します。
mkpatch がツリーを比較するときには目録タグを使います。 たとえば、同じタグを持っている場合、その二つのディレクトリや二つのファイルは、 「同じディレクトリ(またはファイル)」 とみなされます — それぞれが、問題のツリーのどの場所にあるかにかかわらず、そうします (第10章 参照)。
mkpatch で作ったチェンジセットはどのファイルやディレクトリが 追加または削除され、どれが名称変更され、どれが修正されたか(そしてどのように修正 されたか)、そして、どのファイルのパーミッションが変更されたか(そしてどのように 変更されたか)を記述します。通常のテキストファイルが比較される場合には mkpatch はその差分を記述するようなコンテキスト diff を生成 します。mkpatch はバイナリファイルを比較したり(違っている 場合は、新旧両方のバージョンの完全なコピーを保存します)、シンボリックリンク を比較したり(両者が違っている場合は、新旧のリンク先を保存します)することも できます。
チェンジセットの形式の詳細な記述については補遺を見てください。 (付録A 参照)。