この章では、ファイルマージの基本概念について説明します。
この章は、以下の節で構成されています。
ファイルマージの使用方法に関する詳細および使用例については、第 12 章「ファイルマージの起動とファイルの読み込み」を参照してください。
ファイルマージは、比較する 2 つのテキストファイルを読み込んで、それぞれを読み取り専用のテキスト区画に横に並べて表示します。ファイルマージでは、2 つのファイルで異なっている行にマークが付けられ、3 番目のテキスト区画にマージ後のバージョンが表示されます。自動的に起動された場合は、マージ後のバージョンには、次の 2 種類の行が含まれています。
2 つの入力ファイルに共通の行 (この行は、常に出力ファイルに表示されます)
2 つのファイルの間に相違のあることを示すマークが付けられた行 (この行は、デフォルトの自動マージ処理の結果として表示されます)
マージ後のバージョンは、編集したり、出力ファイルとして保存したりすることができます。
マージする 2 つのファイルを読み込む際に、第 3 のファイル、すなわち 2 つのファイル (子孫と呼ばれます) の祖先と呼ばれるファイルも指定できます。祖先ファイルを指定した場合は、ファイルマージにより、祖先と異なる子孫の中の行にマークが付けられ、3 つのファイルすべてに基づいて、マージ後のファイルが作成されます。2 つの入力ファイルを自動的にマージ (自動マージ) する場合は、祖先ファイルを指定する必要があります。
ファイルマージは、2 つのファイルの相違の処理を行います。ファイルマージでは、どのように相違を認識し、分類するかを以下に説明します。
ファイルマージでは、マージする 2 つのファイル (または、2 つのファイルのいずれかと祖先ファイル) の間で異なる行を検出すると、2 つのファイルの該当行にグリフでマークを付けます。このマークが付けられた行のことを、相違と呼びます。ファイルマージが現在示している相違は強調表示されます。
ファイルマージがある時点でフォーカスして (選択されて) いる相違の (同じファイル内で) 直後にある相違を次の相違と呼びます。また、その直前にある相違を前の相違と呼びます。
ある行に行われた変更が、ユーザーまたはファイルマージによって受け入れられると、その相違は解決済みになります。相違は、次の 2 つの方法のいずれかによって解決されます。
フォーカスされている相違に対して、元のファイルのいずれかの行を採用するか、またはマージ後のバージョンを編集することができます。変更内容が適切であることを「次」、「受け入れ」、「受け入れて次へ」の各ボタンをクリックして承認すると、現在の相違は解決されたことになります。
自動マージ機能がオンになっている場合、相違はファイルマージによって自動的に解決されます。ファイルマージによる相違の解決方法については、「ファイルマージのグリフ」を参照してください。
相違を解決すると、グリフの表示が塗りつぶしの状態からアウトラインフォントに変更され、自動的に (ツール属性で「自動的に進む」オプションが有効になっている場合) あるいは、ユーザーの選択により次の相違に移動します。
まだ解決されていない相違を、未解決の相違と呼びます。
ファイルマージの GUI は、大部分の作業を行う「ファイルマージ」ウィンドウから構成されます。
図 3-1 に示されているように、起動時の「ファイルマージ」ウィンドウでは、上部の左右のテキスト区画に、比較されるファイルが表示されます。下部のテキスト区画には、2 つのファイルをマージした後のバージョンが表示され、ここで編集できます。
「ファイル」メニュー |
ファイルを開いたり保存したりするためのコマンドが表示されます。 |
「編集」メニュー |
ファイル間の相違を管理するためのコマンドが表示されます。 |
「ナビゲート」メニュー |
両ファイルの相違間を移動するためのコマンドが表示されます。 |
「オプション」メニュー |
ファイルマージ、スクロール、表示、および定義に関するオプションを設定するためのコマンドが表示されます。 |
「TeamWare」メニュー |
ほかの TeamWare ツールを起動するためのコマンドが表示されます。 |
ツールバー |
ファイル管理のためのさまざまな操作を迅速に行えます。 |
ステータスフィールド |
ファイルマージの状態が表示されます。 |
子区画 |
子ファイルがマーク付きで表示されます。 |
コマンドボタン |
各種機能のナビゲーションおよび編集を迅速に行えます。 |
親区画 |
親ファイルがマーク付きで表示されます。 |
マージ結果区画 |
マージされたファイルがマーク付きで表示されます。 |
マージ中の メッセージ表示領域 |
「ファイルマージ」ウィンドウで実行中の処理に関するメッセージが表示されます。 |
ファイルがテキスト区画に読み込まれると、相違を示すグリフが表示されます。共通の祖先を指定せずにマージされた 2 つのファイル間の相違と、共通の祖先を持つ 2 つのファイル (この場合、実際には 3 方向マージになります) の相違があります。この 2 つの場合では、グリフの意味に多少の違いがあります。次にこの違いについて説明します。
ファイルマージに 2 つのファイルだけを読み込んだ場合、相手ファイルの対応する行と異なることを示すグリフが、それぞれのファイルの該当行に付けられます。
2 つの行が同一の場合は、グリフは表示されません。
2 つの行が異なる場合は、各区画の該当行の横に縦棒 (|) が表示され、異なっている文字が強調表示されます。
1 つのファイルに存在し、もう 1 つのファイルには存在していない行には、その行が存在しているファイルの該当行の横に正符号 (+) が表示され、異なっている文字が強調表示されます。
マージされる 2 つのファイルの祖先ファイルが指定されている場合、共通の祖先ファイルにある対応する行と比較した結果に従って、各子孫の行にマークが付けられます。
3 つのファイルがすべて一致している行には、グリフは表示されません。
祖先には存在していない行が、子孫の一方または両方に追加されている場合、行が追加されているファイルの該当行の横に正符号 (+) が表示され、異なっている文字が強調表示されます。
祖先に存在している行が、子孫の一方または両方から削除されている場合は、行が削除されているファイルの該当行の横に負符号 (-) が表示され、異なっている文字には取り消し線が引かれ、強調表示されます。
祖先の行が、子孫の一方または両方で変更されている場合は、行が変更されているファイルの該当行の横に縦棒 (|) が表示され、異なっている文字が強調表示されます。
解決済みの相違には、アウトラインフォントでグリフが付けられます。
表 3-1 に、自動マージのアルゴリズムを示します。「祖先」は、祖先ファイルに存在するテキスト行の内容です。「変更 1」は、子孫の一方の行に対して行われている変更です。「変更 2」は、「変更 1」とは別の子孫の行に対して行われている変更です。左右の子孫に対して異なる変更が行われている行が存在している場合のみ、自動マージが失敗します。
表 3-1 自動マージ規則
左の子孫 |
右の子孫 |
自動マージ後の行 |
---|---|---|
祖先 |
祖先 |
祖先 |
変更 1 |
祖先 |
変更 1 |
祖先 |
変更 2 |
変更 2 |
変更 1 |
変更 1 |
変更 1 |
変更 1 |
変更 2 |
自動マージ不可 |
ファイルマージによって自動的に相違が解決されると、グリフはアウトラインフォントに変わります。ファイルマージで自動的に解決した相違について、適切な選択がなされているか確認できます。
自動マージ機能を無効にするには、「オプション」メニューで「自動マージ」の選択を解除します。自動マージ機能を無効にすると、ファイルマージでは、3 つのファイルすべてに共通する行のみでマージ後のファイルを構築し、相違の解決はユーザーに一任されます。
祖先ファイルを指定しない場合、2 つの入力ファイルの相違を比較するための参照先がないため、ファイルマージでは相違のある行のどちらが必要な変更かを判断することができません。祖先のない自動マージの結果は、自動マージ機能を無効にしているときと同じになります。ファイルマージでは、2 つの入力ファイルに共通する行のみでマージ後のファイルを構築し、相違の解決はユーザーに一任されます。