delta の記法を使って、このマージ問題をはっきりさせましょう。
ひとつの可能性は、主系にたいして一番高い優先順位を 与えて、キャンディスからの変更をマージし、それから プロジェクトツリー中にのみ現れるローカルな変更をマージすることに 一番低い優先順位をつけることです。この解決策は、冗長な変更からの 不要な衝突をすることなしに、以下のように書き下すことができます:
tmp = delta(X, Y)[Z] where X = lord@emf.net--2003-candice/hello-world--candice--0.1--base-0 Y = lord@emf.net--2003-candice/hello-world--candice--0.1--patch-2 Z = lord@emf.net--2003-example/hello-world--mainline--0.1--patch-4 answer = delta(L,M)[tmp] where L = lord@emf.net--2003-example/hello-world--mainline--0.1--patch-4 M = /usr/lord/examples/wd/hw-AnB
利用に関する注意: マージにおける「優先順位」の概念は、どのようにして (必要な)衝突を扱うかということを処理しなくてはなりません。 主系に対して高い優先順位を与えることで、 他のふたつのツリーが含む衝突のある変更は、.rejファイルに 現れることを保証します。それは以下のような場合には重要なことになりえます。 たとえば、衝突が解消した主系に相対的な変更を最小化したい 場合です(不完全パッチ処理 — どのようにして衝突が扱われるか項 参照)。
似たように見えるが別の解決策が必要になるのは、主系よりも キャンディスのブランチに高い優先順位を与えたい場合です。
tmp = delta(X, Y)[Z] where X = lord@emf.net--2003-candice/hello-world--candice--0.1--patch-2 Y = lord@emf.net--2003-example/hello-world--mainline--0.1--patch-6 Z = lord@emf.net--2003-candice/hello-world--candice--0.1--patch-4 answer = delta(L,M)[tmp] where L = lord@emf.net--2003-candice/hello-world--candice--0.1--patch-4 M = /usr/lord/examples/wd/hw-C-4
私達は実際、「手あたり次第の」方法で解決策を実装することもできます。 二つのブランチのマージ履歴を調べ、どのように解決したかを調べ、 必要なツリーをチェックアウトし、チェンジセットを計算するのにmkpatch を使い、dopatchでそれを適用する、という方法です。 しかしこのあとすぐに見るように、archはこの手のマージのために 組み込みのサポートがあります。