行ペアリング

Merge はテキスト内容を比較するとき、まず、はっきりと区別できる未変更、変更、挿入、および削除テキストのブロックを識別します。このオプション ページの設定は、変更されたテキストのブロックで、識別されたブロックにのみ関係があります。これらにより、変更ブロック内の対応する可能性がある行をどのように一致させてペアにするか(ひいては、変更ブロック内の特定の行を変更、挿入、または削除として強調表示するかどうかに影響を与えます)、また個々の行内のテキストの相違をどのように強調表示するかを決定します。行ペアリングは、変更されたテキストのブロックをさらに分割する方法にも影響を与えます。この場合、一致した行のペアに基づいて、変更されたテキストのブロックをインテリジェントに分割するオプションをオンにする必要があります。

Information これらのオプションは、比較されたファイル間の特定の相違を Merge が識別するかどうかには影響しません。しかし、検出された変更箇所を示す方法に根本的に影響を与えます。

行内の変更部分の強調表示と変更ブロックの分割

ペアになった行内の変更部分を(簡略的はでなく)詳細に示す

このオプションをオンにすると、Merge はペアとなる変更された行内のテキストに対して詳細な比較を実行し、挿入、削除、変更されている文字または単語((文字ではなく)単語に基づいて行を比較し、強調表示するオプションの設定に応じて)をすべて強調表示します。文や単語は、フォントと色オプション ページで指定した色を使って強調表示されます。比較するファイルの内容によっては、このオプションを有効にすることで、ファイル比較が遅くなる可能性があります。

オプションをオフにすると、Merge は変更された行のペアに対して簡略的なインライン比較を実行します。行内の変更されている最初の文字から最後の文字までのテキストが、変更されたスタイルで強調表示されます。このオプションは、目に見えて異なる多くの行がペアになっている比較の中を視覚的にすっきりさせます。これは、行ペアリング ルールが有効になっている状況で、特に役立つことがあります。また、このオプションを使用するとパフォーマンスは向上しますが、インラインの強調表示のきめ細かさは低くなります。

Information このチェック ボックスは、古いバージョンの Merge の表示オプション ページにあった、行内で変更部分を簡略的に示すラジオ ボタンと行内で変更部分を詳細に示すラジオ ボタンに相当します。

(文字ではなく)単語に基づいて行を比較し、強調表示する

このオプションをオンにすると、各行で一語単位の比較を実行し、相違を単語ベースで強調表示します。これは一般的に、このオプションがオフのときに実行される文字レベルの比較と強調表示よりも、ビジュアル クラッター(視覚的混乱)が少なくなります。

このオプションは行内の変更点を強調するとともに、行のペアリング方法にも影響を及ぼします。(通常、このオプションによって行ペアリングが大きく変更されることはありませんが、比較の精度における相違は結果に影響することがあります。)

一致した行のペアに基づいて、変更されたテキストのブロックをインテリジェントに分割する

このオプションをオンにすると、Merge は変更されたテキストの複数行のブロックをより小さい挿入、削除、変更されたテキストのブロックに分割しようとします。この分割は、Merge が変更されたテキストの元のブロック内で一致させることができる、対応する行のペアに基づいて、インテリジェントに実行されます。縦方向のパディングを追加して変更部分を整列させる設定をこのオプションと併せて利用すると、特に有用です。

オプションがオフ(デフォルト)の場合、Merge は変更されたテキストのブロックを分割しません。

変更されたテキストのブロックの分割(このオプションがオンの場合に発生する見込み)により、比較表示に表示される挿入、削除、および変更が隣り合わせになることに留意してください。これは、比較したファイル間にどの程度の関連性があるかを正確に理解したい場合に非常に有用です。さらに、あるファイルから別のファイルへ個々の変更を伝達しやすくします。しかし、副次的な存在である、テキスト比較表示の隣接したリンク線を、最初は見慣れないと思われるかもしれません。また結果として、変更、挿入、および削除の個体数が増えることから、単純明快な比較を行う状況によっては、不必要に複雑さの度合いが増す可能性があります。そのため、この設定を試してみて、さまざまな異なるファイルでどのように動作するのかを確かめてください。

Information このチェック ボックスは、古いバージョンの Merge の表示オプション ページにあった、ブロックの変更を行ごとの変更として扱うオプションに取って代わりました。

行ペアリングのオプション

変更されたテキストの各ブロック内の行のペアを一致させる

Merge は、変更されたテキストのブロックで、対応する行のペアを一致させるためのいくつかのアプローチを提供しています。(行ペアリングが比較結果の表示にどのような影響を及ぼすかについては、このトピックの冒頭の前書きを参照してください。)

ほとんどの場合、デフォルトの設定であるインテリジェント(行の内容に基づく)をお勧めしますが、特に、データを含んでいるファイルを対象とするような状況では、別の選択が有効であるかもしれません。

インテリジェント(行の内容に基づく)

このオプションをオンにすると、Merge は変更されたテキストの両側のブロック内にある各行の内容を検査し、ヒューリスティックとアクティブなすべての行ペアリング ルールを使用して、関連する行のペアを探します。

連続的(ブロックの上から下に向かって行う)

このオプションをオンにすると、Merge は変更ブロックの左側の先頭行と右側の先頭行をペアにし、左側の 2 番目の行と右側の 2 番目の行を、3 番目の行と 3 番目の行をというように、変更ブロックの最後に至るまで各行をペアにします。変更ブロックの一方に含まれる行が他方より多い場合は、多い分の行はペアにならないまま、挿入または削除されたものとして強調表示されます。

このオプションを選択した場合、連続的な行のペアリングでは行の内容を考慮しないため、行ペアリング ルールは使用されません。

適応的(ブロックの両側の行数が等しい場合は連続的、そうでない場合はインテリジェント)

このオプションをオンにすると、Merge は変更ブロックの両側に同じ行数が含まれているかどうかに応じて、連続的インテリジェントのどらちらかの行ペアリング方法を選びます。連続的な方法は、変更ブロックの両側の行数が等しい場合にのみ使用されます。それ以外の場合は、インテリジェントな方法が使用されます。

行ペアリングの詳細オプション

このボタンは、行ペアリングの詳細オプション ダイアログを開きます。

行ペアリング ルール

以下でチェックされた行ペアリング ルールは、行のペアを一致させるときに考慮する行の部分を定義します

Merge は、この一覧でチェックされたすべての行ペアリング ルールを考慮して、対応する行の一致を試みます。(行ペアリングが比較結果の表示にどのような影響を及ぼすかについては、このページの先頭の導入部を参照してください。)

ルールの定義を編集する場合は行ペアリング ルールをダブルクリックし、ルールを作成または削除する場合はボタンを使用します。

検討

行ペアリング ルールにより、Merge は指定された正規表現と一致する行の特定の部分に基づいて、変更されたテキストのブロック内の対応する行をペアリングできるようになります。

デフォルトでは、アクティブになっている行ペアリング ルールはなく、Merge は各行のテキスト全体を考慮して、変更されたテキストのブロック内の対応する行を一致させ、ペアリングを行います。この方法はさまざまなファイルに適していますが、ファイルの種類によっては、特定の行の一部分のみが考慮されるよう、行ペアリング ルールを作成して有効にすることで、比較結果の表示を大幅に改善できます。

行ペアリング ルールの一般的な使用法として、ローカリゼーション ファイル内の行のペアリングがあります。通常、これらのファイルは多くの行から成り、各行には一意のリソース識別子と、関連するいくつかのローカライズされたテキストが含まれています。したがって、たとえば、あるファイルの英語版と日本語ローカライズを比較するときに、各行のテキスト全体を考慮の対象にすると、ほとんどの行は適切にペアリングされません。これは、各行のテキストのほとんどの部分は言語固有であり、ひいては特定のローカリゼーションに固有であるためです。しかし、適切な行ペアリング ルールを適用すれば、各行のリソース識別子のみを考慮することになるため、このような比較(ただし、両方のファイルにローカライズされたリソースが同じ順序で入っている場合)に対し、通常、優れた結果をもたらすことが可能になります。

行ペアリング ルールには、ほかにも多くの使用法があります。たとえば、Windows リソース(.rc)ファイルを比較するときに、定義を含んでいる行のリソース識別子が一致していれば、その他の点ではまったく異なっていても、行をペアリングしてみることは意味を成します。同様に、C/C++ の #define ディレクティブはほとんどの場合、同じ識別子を定義していれば、行の残り部分の内容に関係なく一致させる必要があります。