ファイル比較とマージの概観


ここでの主題は、WinMergeがどのようにして、テキストファイル中の 差分を見つけ、また、表示するのかということ。 そして、単純なファイルの比較とマージ操作のデモを行います。 バイナリファイルに関する情報は、Hex形式比較を参照してください。

1. ファイルの比較

私たちは、ある方法で関連付られる二つのファイルを、いつも比較します。 たとえば、別々の時間、または、別々の人によって編集された二つのバージョンのファイルなどです。 そのような二つのファイルを検査すれば、いくつかの同じような領域と 同様に、異なる文字と単語、異なる行、連続したテキストブロックの差分など、くつかの違いを見つけることができます。 しかし、二つのファイル間のすべての差異を、お気に入りのエディターで調べることは、 退屈で間違いを起こしやすいでしょう。 WinMergeの様な、比較/マージに特化したツールは、 この作業を体系的かつ効率的に 行えるように設計されています。

多くの人が使っている、スペルチェッカーのような、シンプルな差分ユーティリティは、 体系的な手段で文書の最後まで、辞書と異なる単語をハイライトし、 スペル間違いを解決するのを助けます。 しかしながら、文字と単語のみで見ることは、複数ファイル間の差異を理解するために 効率的な方法ではありません。 この理由で、多くの差分ユーティリティは比較の基本単位として、 行を代わりに使用します。

WinMergeも、比較の基本単位として、行を使用します。 単語と文字は、比較とマージ操作の中では、個別には扱われません。 例証するために、一行を除いて同一の二つのファイルを考えてください。 一行が、異なる4単語を含む二つのバージョンで、一方のバージョンには、 余分なスペースがある時、ファイルには5つではなく、 1つの差異があると判断します。

単語よりも、行比較の方が速い場合、 一度に一行を比較する代わりに、単一の違いとして行全体を扱うことは、さらに有効です。 あとで見るように、複数行の差分を見つけることは、 マージにも効率的です。

1.1. 単純なファイル操作

このセクションは、二つのファイル間の差分を、 WinMergeで行比較する方法の単純な例を述べています。

  1. テキストエディターを使って、ここに示す内容と名前の二つのファイルを、 単語と改行に注意して正確に作成してください。

    File1: 

    It's slow comparing words 
    and characters. Instead,  
    WinMerge compares lines.
    Believe it or else.

    File2: 

    It's slow comparing words.
    WinMerge compares lines.
    Believe it or not.
  2. WinMergeを起動してください。例えば、デスクトップのWinMerge desktop shortcutWinMergeへのショートカットをダブルクリックしてください。

  3. ファイルとフォルダーの選択ダイアログで、 File11番目に、 File22番目のファイルに指定し、 比較をクリックしてください。このように、左と右のファイルペインに二つのファイルが開かれ、 ファイル比較ウィンドウが表示されます。

    Compare Files screenshot

    この要素は、ファイルの比較とマージで、 さらに詳細に説明されています。 以下はこの例で注意すべきいくつかの点です。

    差分の個数

    このメッセージは、 WinMergeウィンドウ下部のステータスバーにあり、 2つの差分が見つかったことを説明しています。

    異なった色

    差分ブロックは異なる背景色でマークされます。 (デフォルトは、ゴールド)

    行差分は、単語背景色を使用して、 差分ブロック中の変更されたテキストをマークすることができます。 (デフォルトは、ライトイエロー)

    同じ行はマークされません。 これらは、例の3行目のような、白の背景色です。

    空白行

    左の比較ペインに注目してください。 2行目にはテキストがあります。 他方のペインは、同じ場所が灰色の空行になっています。 この空行は、File2ソースファイルには、存在しません。 WinMergeが何をしたのでしょう?

    WinMergeは、他方のバージョンにより多くの行が存在すると、 1行、または、それより多くの灰色の空行を、一方のバージョンに挿入します。 これらの灰色の空行は、ソースファイル中の空行を表しているわけではありません。 これらは、表示上のプレースホルダーに過ぎません。 プレースホルダー行の目的は、左と右のバージョンの差分を垂直に整列させることです。 例で述べたように、 WinMerge compares linesのテキストは、 たとえソースファイル中では異なる行にあっても、 比較ウィンドウには並んで表示されます。 このことが、WinMergeでの差分比較を、 従来のエディターより容易にさせています。

    ティップ

    空行の一つの重要性は、たとえ、ソースファイルではそうでなくても、 ファイル比較ウィンドウの両方(または3つすべて)のペインには、 いつも同じ総行数が表示されていることです。

    WinMergeが、どのように差異を検出して、表示するかということを 理解しているので、次のステップで示されるように、 効率的な比較機能を使用できます。

  4. ツールバーにある、現在の差異ボタン 現在の差異をクリック (または、Alt+Enterキーを押下)してください。このボタンが使えない(例えば、カーソルが違う行にある)時は、 代わりに、最初の差異ボタン最初の差異をクリック(または、Alt+Homeキーを押下)してください。

    差異を選択したら、Diffペインに二つのバージョンがロードされます。 Diffペインで、どの行に差異が含まれているか確認し、残りのファイルから独立して、それらを調べることができます。 この例では、違いの一つは明確で、二つの行を持っています。

    Compare Files Diff Pane

  5. ツールバーの、次の差異ボタン次の差異をクリック (または、Alt+Enterキーを押下)してください。 これは、同じ行(差異ではない)を飛び越し、 最後の行を選択します。

    ファイルの最後に到達し、すべての差異を検査するチャンスを得ることができました。 これは、つまらない例です。ここに、ただ二つの差異があります。 そして、WinMergeで、これらの差異を比較する方法が二つあります。 しかしそれは、 WinMergeナビゲーション・コントロールを使用することの有効性を証明しています。

2. ファイルのマージ

マージの目的は、二つのファイルの変更を一つのファイルへ結合することです。 マージは、比較操作で使われる、概念と機能を拡張します。 このセクションを始める前に、これまでのセクションを読んでください。 さらに、二つのファイルバージョン間の差異を見つけ、差異を解決し、結果を一つの targetバージョンに保存します。

ファイルのマージは、同時開発を可能にし、それは、チーム環境の中でありふれたタスクです。 例えば、あなたともう一人の人が、 同時期に同じプログラムファイルにコードを追加したいとします。 あなたは、両方ともファイルの同一のコピーからはじめます。 しかし、開発中に、同一でない個別のバージョンを作成します。 ある時点で、二つのバージョンは、 それぞれの貢献者による変更を保ったまま、 一つにマージされなければなりません。

SubversionやGitのようなバージョン管理システムは、マージを 促すことができます(または、開始させられます)。 例えば、お使いのバージョン管理システムが、マージ・コンフリクトにより、リポジトリへのサブミットを妨害するかもしれません。 あなたが自分のバージョンで作業中に、他の誰かが、同じファイルの異なるバージョンをチェックインして、 バージョン管理システムが差分を自動マージできなかった場合、競合が発生します。 競合が発生した場合、あなたのバージョンを提出する前に、 競合しているバージョンをマージする必要があるかもしれません。 多くのシステムには、差分とマージツールが統合されています。 しかし、あなたは、代わりにWinMergeを使いたいかもしれません。

Just as with comparing, you use WinMerge's toolbar controls (or keyboard shortcuts) to systematically step through the differences. Resolve each difference by copying either its left or right candidate to the other side. すべての差異を解決した時、 WinMergeは、すべての差異が解決されたことを知らせ、 マージ作業を完了します。

2.1. 単純なマージ操作

このちょっとした課題は、 ファイル比較ウィンドウのコントロールを、 先に示したシンプルなファイルを体系的にマージするために、どのように使用するかを示しています。

  1. ツールバーの、Current Difference button 現在の差異ボタンをクリックして、 最初の差異を選択してください。このボタンが使えない場合、 代わりに、First Difference button 最初の差異ボタンを クリックしてください。

  2. Copy Right button 右へコピーをクリックすると、 File1から、File2へ、 一つの差異がマージされます。 File2の中の差分1行が、 File1の2行で置き換えられ、 灰色の空行が無くなっていることに注意してください。

  3. Next Difference button 次の差異をクリックすると、 2番目の差異を選択します。これは、差異を自分で発見して選択するより簡単です。 そして、すべての差異を端から端まで難なく調べたいなら、特に便利です。

  4. Copy Left button 左へコピー をクリックすると、 2番目の差異を、File2から、 File1へマージします。

    マージが完了してファイルが同一になると、メッセージが表示されます。

  5. OKをクリックし、メッセージを閉じてください。 差異のステータスが、 差異 1/1から、 同一に変わります

  6. Ctrl+Sを押下して変更を保存してください。

非常にシンプルであると同時に、 この例のデモは、 ある程度の比較をしたり差異をマージしたりする基本的な手順です。

2.2. マージしたファイルの保存先を選択

マージ結果が保たれるようにコントロールしてください。 WinMergeのファイル比較ウィンドウには、幾つかのマージツールがそうであるように、 分割された結果ペインがありません。 最も単純な方策は、片方、または、両方(または3つすべて)のソースファイルの変更を保存することです。 Ctrl+Sを押下して、両方のファイルの変更を何度か保存してください。 代わりに、ファイル保存左側のファイルを保存、または、ファイル保存右側のファイルを保存をクリックして、片方のファイルを保存してください。

どちらか一方のソースファイルの代わりに、別のファイルに書き込むには、 ファイル名前を付けて保存を使用してください。例えば、ターゲットファイルが、バージョン管理システムによって作成された、 差分ファイル、または、競合ファイルなどの場合です。

同様に、WinMergeのコマンドラインで、コマンドラインで説明されている、 任意のoutputfile引数を使用して、 両方(または3つすべて)のソースファイルが変更されていない状態のままにしておくことができます。