[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
二人の人が同じファイルのコピーへの変更を行なったとき,衝突している部分の
警告を用いて,お互いの変更の両方を含んでいるマージされた出力を
diff3
で生成することが可能です.
三つ以上のファイルを同時に比較するために,diff4
と
diff5
のような名前のプログラムを想像するかもしれませんが,実際
にそれが必要になることは滅多にありません.二つの変更の組を同時にマージす
ることで,三つ以上のファイルの変更の組をマージするために,
diff3
を使用することが可能です.
diff3
で,二つの修正されたバージョンから共通の以前のバージョン
に変更を取り込むことが可能です.これで,二つの新しいファイルに存在する変
更された組をマージします.二番目の引数として共通の以前のバージョンを指定
し,二つの新しいバージョンを最初と三番目の引数として以下のように指定して
ください.
diff3 mine older yours |
アルファベット順なので,引数の順番を覚えられるでしょう.
このことから,yoursからolderを取り除いてその結果をmine に追加したり,olderからyoursへの変更をmineにマージして いると考えられるでしょう.このマージは,それぞれの変更が近くにあり, mineとolderでマッチする限りうまくいくでしょう.すべての三つ の入力ファイルが異なっているときや,olderだけが異なっているときは うまくいかないでしょう.これを衝突(conflict)と呼んでいます.三つの 入力ファイルがすべて異なるとき,この衝突をオーバーラップ(overlap) と呼んでいます.
diff3
は,オーバーラップや衝突を処理する方法も提供しています.
オーバーラップや衝突を削除したり,オーバーラップだけを選択したり,衝突を
特殊な`<<<<<<<'と`>>>>>>>'の行で印を付けたりすることが可能です.
diff3
で,マージした出力を作成するために最初のファイルに適用す
ることが可能なed
スクリプトとして,マージした結果を出力すること
も可能です.しかし,diff3
でマージした出力を直接生成した方が良
いでしょう.これでed
の問題も回避します.
8.1 組み込む変更を選択する | Selecting changes to incorporate. | |
8.2 衝突の印づけ | Marking conflicts. | |
8.3 マージされた出力を直接生成する | Generating merged output directly. | |
8.4 不完全な行をdiff3 がマージする方法 | How diff3 merges incomplete lines. | |
8.5 変更されたファイルの保存 | Emulating System V behavior. |
mineにマージするために,`-e'や`--ed'を用いて, olderからyoursへのマージされていないすべての変更を選択するこ とが可能です.`-3'や`--easy-only'を用いて,オーバーラップ のないマージされていない変更だけを選択することが可能で,`-x'や `--overlap-only'を用いて,オーバーラップされている変更だけを選択 することも可能です.
`-e',`-3',そして`-x'オプションは,マージされ ていない変更(unmerged changes),例えば,mineとyoursで変更が 異なるところだけを選択します.mineとyoursが同じところでは, 変更部分は既にマージされていると仮定されるので,olderから yoursへの変更を無視します.この仮定が安全ではない場合,`-A' や`--show-all'オプションを使用することが可能です(see section 8.2 衝突の印づけ).
これら三つのオプションをそれぞれ用いたコマンドdiff3
の出力例は
以下のようになります(ファイルの完全な内容は,see section 7.1 三番目の入力ファイルの見本).
`-e'の出力が`-3'と`-x'で出力される変更の組をバラし
て合体させたものになっていることに注意してください.
`diff3 -e lao tzu tao'の出力です.
11a -- The Way of Lao-Tzu, tr. Wing-tsit Chan . 8c so we may see their result. . |
`diff3 -3 lao tzu tao'の出力です.
8c so we may see their result. . |
`diff3 -x lao tzu tao'の出力です.
11a -- The Way of Lao-Tzu, tr. Wing-tsit Chan . |
diff3
で,衝突部分に特殊なマーカー行を用いてマージされた出力を
囲むことで,印を付けることが可能です.二つのファイルAとBから
の衝突は,以下のように印が付きます.
<<<<<<< A lines from A ======= lines from B >>>>>>> B |
三つのファイルA,BそしてCからの衝突は,以下のように印 が付きます.
<<<<<<< A lines from A ||||||| B lines from B ======= lines from C >>>>>>> C |
`-A'や`--show-all'オプションは,`-e'オプションのよ うな動作をしますが,衝突部分を大カッコで囲み,マージされていない変更だけ でなく,olderからyoursへのすべての変更を出力します.このため, サンプルの入力ファイル(see section 7.1 三番目の入力ファイルの見本)が与えられると, `diff3 -A lao tzu tao'は,`tzu'の差異部分の衝突の周りに大カッ コを書きます.
<<<<<<< tzu ======= The Way that can be told of is not the eternal Way; The name that can be named is not the eternal name. >>>>>>> tao |
また,三方向の衝突は以下のように出力されます.
<<<<<<< lao ||||||| tzu They both may be called deep and profound. Deeper and more profound, The door of all subtleties! ======= -- The Way of Lao-Tzu, tr. Wing-tsit Chan >>>>>>> tao |
`-E'や`--show-overlap'オプションは,`-A'や `--show-all'オプションより情報が少なくなり,それはマージされてい ない変更だけを出力し,二番目のファイルの内容を出力しないためです.そのた め,`-E'オプションは`-e'オプションのように動作しますが,三 方向のオーバーラップした変更で,最初と三番目のファイルが大カッコで囲みま す.同様に,`-X'は`-x'のように動作しますが,(オーバーラッ プが必要な)変更のすべてを大カッコで囲みます.例えば,上記のような三方向 のオーバーラップしている変更に対し,`-E'と`-X'オプションは 以下を出力します.
<<<<<<< lao ======= -- The Way of Lao-Tzu, tr. Wing-tsit Chan >>>>>>> tao |
無意味で情報のない名前を持つファイルを比較している場合,`<<<<<<<', `|||||||',そして`>>>>>>>'の大カッコで別名を表示するために, `-L label'や`--label=label'オプションを使用す ることが可能です.このオプションで,それぞれの入力ファイルごとに,三回ま で与えることが可能です.このため,`diff3 -A -L X -L Y -L Z A B C'は `diff3 -A A B C'のように動作しますが,出力は,ファイル名`A', `B',そして`C'ではなく,ファイル名`X',`Y',そして `Z'からのようになります.
`-m'や`--merge'オプションを用いると,diff3
はマー
ジされたファイルを直接出力します.これは,それを生成するために
ed
を使用するより効果的で,ed
が除外するテキストではな
いファイルでも動作します.ed
スクリプトオプションを使用せずに
`-m'を指定する場合,`-A' (`--show-all')が仮定されま
す.
例えば,コマンド`diff3 -m lao tzu tao'は(入力ファイルのコピーは see section 7.1 三番目の入力ファイルの見本),以下の出力を生成します.
<<<<<<< tzu ======= The Way that can be told of is not the eternal Way; The name that can be named is not the eternal name. >>>>>>> tao The Nameless is the origin of Heaven and Earth; The Named is the mother of all things. Therefore let there always be non-being, so we may see their subtlety, And let there always be being, so we may see their result. The two are the same, But after they are produced, they have different names. <<<<<<< lao ||||||| tzu They both may be called deep and profound. Deeper and more profound, The door of all subtleties! ======= -- The Way of Lao-Tzu, tr. Wing-tsit Chan >>>>>>> tao |
diff3
がマージする方法 `-m'を用いると,不完全な行(see section 3. 不完全な行)は見つかった ものとして,単純に出力にコピーされます.出力の終りで衝突があり,入力ファ イルの一つが不完全な行で終る場合,不完全な行が追加されるので, `|||||||',`=======',または`>>>>>>>'の大カッコは,行の最 初ではない場所に現れるでしょう.
`-m'オプションを用いないと,ed
スクリプトオプションが指
定されていて,不完全な行が見つかる場合,diff3
は警告を生成し,
改行が存在しないかのように動作します.
伝統的なUnix diff3
は,変更を保存するコマンド`w'と`q'
を後置しないed
スクリプトを生成します.System V diff3
は,これらの追加コマンドを生成します.GNU diff3
は通常,伝
統的なUnix diff3
のように動作しますが,`-i'オプションを
用いると,System V diff3
のように動作し,`w'と`q'コマ
ンドを後置します.
`-i'オプションは,ed
スクリプトオプションの
`-AeExX3'の一つを要求し,マージされた出力のオプション`-m'
と互換性がありません.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |