次の例では、共通の祖先を持つ 2 つのファイルをマージしています。2 つのファイルは、それぞれ file_1、file_2 という名前で、祖先ファイル名は matriarch です。子孫ファイルの file_1 と file_2 は、編集によって matriarch を元に作成されました。子孫ファイルには、行削除、新しい行の追加、および行の変更などの変更が加えられています。
例の各行の内容から、変更の有無、およびどのように変更されたかを確認できます。祖先ファイルには、例 13-1 に示すように、12 行だけ格納されています。
ファイルマージでは、読み込んだファイルに行番号は付けていません。コード例では、わかりやすくするために行番号を付けています。
1 This line is deleted in file_1 2 This line is in all three files 3 This line is deleted in file_2 4 This line is in all three files 5 This line is in all three files 6 This line is changed in descendants 7 This line is in all three files 8 This line is changed in descendants 9 This line is in all three files 10 This line is changed in file_2 11 This line is in all three files 12 This line is in all three files
例 13-2 は、file_1 の内容を示しています。このファイルと matriarh との相違は、次のとおりです。
matriarch ファイルの 1 番の行は、file_1 では削除されている。
4 番の行の後に新しい行が 1 行追加されている。
6 番の行は変更されている (さらに file_2 では、この行に異なる変更が加えられている)。
8 番の行は変更されている (さらに file_2 でも、この行に同様の変更が行われている)。
2 This line is in all three files 3 This line is deleted in file_2 4 This line is in all three files &&& Added to file_1 &&& 5 This line is in all three files 6 This line is modified in file_1 from matriarch 7 This line is in all three files 8 #&# Changed in file_1 and file_2 #&# 9 This line is in all three files 10 This line is changed in file_2 11 This line is in all three files 12 This line is in all three files
例 13-3 は、file_2 の内容を示しています。このファイルと matriarh との相違は、次のとおりです。
matriarch ファイルの 3 番の行は、file_2 では削除されている。
6 番の行は変更されている (さらに file_1 では、この行に異なる変更が加えられている)。
8 番の行は変更されている (さらに file_1 でも、この行に同様の変更が行われている)。
10 番の行は変更されている (file_1 では、この行は変更されていない)。
11 番の行の後に新しい行が 1 行追加されている。
1 This line is deleted in file_1 2 This line is in all three files 4 This line is in all three files 5 This line is in all three files 6 This line is altered in file_2 from matriarch 7 This line is in all three files 8 #&# Changed in file_1 and file_2 #&# 9 This line is in all three files 10 ### Changed in file_2 ### 11 This line is in all three files ### Added to file_2 ### 12 This line is in all three files
このとき、「ファイルマージ」ウィンドウの左上には、相違が 7 つ発見され、そのうち 6 つは自動的に解決され、1 つだけが未解決のままで残っているというメッセージ (図 13-1 参照) が表示されています。また、解決済み相違は、アウトラインフォントのグリフで表示されています (図 13-2 および図 13-3 参照)。
各グリフは、次のような意味を持っています。縦棒はその行が変更されていることを示します。正符号は 1 行追加されていることを意味します。負符号は 1 行削除されていることを意味します。未解決の状態は、塗りつぶしグリフで表示され、解決済みは、アウトラインで表示されます。これらのグリフは、カラーマップに空きがない場合を除き、色で強調表示されます。デフォルト設定では、赤色は変更を、緑色は削除を、黄色は追加を表わします。
未解決の相違 (行 6) には、縦棒のマークが付けられています。
ファイルマージは、file_1 と file_2 の 6 行目のような未解決の相違を強調表示します。ファイルマージによって相違が解決中である場合は、「ファイルマージ」ウィンドウ の「マージ後の結果」区画には、自動マージ後のファイルの現在の状態が表示されます。
次の相違に進むには、該当するファイルの上の「次」ボタンか、「ナビゲート」⇒「次」を選択します。次の相違が現在の相違になります。
下矢印をクリックしながら、最後の相違まで進むこともできます。
自動マージでは、1 つのファイルで変更が行われ、ほかのファイルが変更されていない場合は、その変更を保持します。
自動マージで相違が解決できなかった場合は、その相違に関連する行の横に塗りつぶしのグリフが強調表示されるので、ユーザーが選択して相違を解決する必要があります。縦棒は、その行が (追加または削除されたのではなく) 変更されていることを表わしています。この場合、2 つのファイルの同じ行に異なる変更が行われていて、ファイルマージではどちらの変更が有効であるが判断できないため、自動マージは失敗します。
このような相違は、次の方法のいずれかによって解決します。
左側の「受け入れ」または「受け入れて次へ」ボタンをクリックし、file_1 の行を出力ファイルに格納する。
右側の「受け入れ」または「受け入れて次へ」ボタンをクリックし、file_2 の行を出力ファイルに格納する。
出力ファイルを直接編集する。
出力ファイルを編集するには、出力ファイルの区画にポインタを移動し、変更する行にカーソルを置きます。この例では、次のように入力します。
>>> This line edited by hand <<<
「編集」⇒「現在のマークを解決済みに変更」を選択します。このメニュー項目を選択すると、相違に解決済みのマークが付けられます。この例では、このほかに未解決の相違は存在しないため、自動的には次の相違に移動しません。
この時点で、「ファイルマージ」ウィンドウの左上には、相違がすべて解決されたことが示されていますが、自動マージされた相違の検証を続けます。
下矢印のボタンをクリックして相違の最後まで検証を続けます。
最後の相違は、file_2 にのみ追加されている行によって生じています。ファイルマージは、file_1 に新しい行が追加されている 3 番目の相違の場合と同様に、この新しい行も出力ファイルに格納しています。
すべての相違が解決され、自動マージされた相違の検証が終了したら、出力ファイルを保存することができます。出力ファイルには、「ファイルを開く」ダイアログで指定されている名前が付けられます。出力ファイル名のデフォルトは、filemerge.out です。出力ファイルを保存するには、「ファイル」⇒「保存」を選択するか、「保存」ボタンをクリックします。このファイルを別の名前で保存するには、「ファイル」⇒「別名保存」を選択します。