<?xml version="1.0" encoding="UTF-8"?>
<article id="Intro_diffs">
  <title>ファイル比較とマージの概観</title>

  <para>このセクションでは、WinMerge
がテキストファイルの差異をどのように検出し、表示するかを説明します。また、簡単な比較およびマージ操作の例も紹介します。バイナリファイルに関する情報は、<xref
linkend="Compare_bin" />を参照してください。</para>

  <section id="Intro_diffs_comparing">
    <title>ファイルの比較<indexterm>
        <primary>ファイルの比較</primary>

        <secondary>概要</secondary>
      </indexterm></title>

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

    <para>スペルチェッカーのようなシンプルなツールは、文書全体を通して、辞書と異なる単語をハイライトし、
スペルミスの修正を支援します。しかしながら、文字と単語のみで見ることは、複数ファイル間の差異を理解するために 効率的な方法ではありません。
この理由で、多くのDiff ユーティリティは比較の基本単位として、 行を代わりに使用します。</para>

    <para>WinMergeも、比較の基本単位として、行を使用します。
単語や文字は、比較やマージの基本単位としては扱われません。例として、一行を除いて同一の二つのファイルを考えてください。 ある 1 行に 4
つの単語の違いがあり、一方のバージョンには、 余分なスペースがある時、ファイルには5つではなく、1 つの差異として扱われます。</para>

    <para>行単位での比較は、単語単位よりも高速であるため、一度に一行を比較する代わりに、単一の違いとして行全体を扱うことは、さらに有効です。
あとで見るように、複数行の差異を見つけることは、 マージにも効率的です。</para>

    <section>
      <title>単純なファイル操作</title>

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

      <orderedlist>
        <listitem>
          <para>テキストエディターを使って、ここに示す内容と名前の二つのファイルを、単語や改行を正確に再現して作成してください。</para>

          <formalpara>
            <title>File1:</title>

            <para><screen>It's slow comparing words 
and characters. Instead,  
WinMerge compares lines.
Believe it or else.</screen></para>
          </formalpara>

          <formalpara>
            <title>File2:</title>

            <para><screen>It's slow comparing words.
WinMerge compares lines.
Believe it or not.</screen></para>
          </formalpara>
        </listitem>

        <listitem>
          <para>WinMergeを起動してください。例えば、デスクトップの<inlinemediaobject>
<imageobject> <imagedata contentwidth="32" fileref="screenshots/wm_icon.png"
/> </imageobject><textobject>
                <phrase>WinMerge デスクトップ ショートカット</phrase>
              </textobject>
            </inlinemediaobject>WinMergeへのショートカットをダブルクリックしてください。</para>
        </listitem>

        <listitem>
          <para>ファイルとフォルダーの選択ダイアログで、 <filename>File1</filename>を<guilabel>1番目</guilabel>に、
<filename>File2</filename>を<guilabel>2番目</guilabel>のファイルに指定し、
<guibutton>比較</guibutton>をクリックしてください。このように、左と右のファイルペインに二つのファイルが開かれ、
ファイル比較ウィンドウが表示されます。</para>

          <mediaobject>
<imageobject> <imagedata contentwidth="600"
fileref="screenshots/missing_lines.png" /> </imageobject><textobject>
              <phrase>ファイルを比較するスクリーンショット</phrase>
            </textobject>
          </mediaobject>

          <para>この画面については、<xref linkend="Compare_files" />で、
さらに詳細に示しています。以下はこの例で注意すべきいくつかの点です。</para>

          <variablelist>
            <varlistentry>
              <term>差異の個数</term>

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

            <varlistentry>
              <term>差異の色</term>

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

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

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

            <varlistentry>
              <term>空白行</term>

              <listitem>
                <para>左の比較ペインに注目してください。 2行目にはテキストがあります。 他方のペインは、同じ場所が灰色の空行になっています。
この空行は、<filename>File2</filename>ソースファイルには、存在しません。これはなぜでしょうか？</para>

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

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

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

        <listitem>
          <para>ツールバーにある、<inlinemediaobject>
<imageobject> <imagedata contentdepth="15"
fileref="screenshots/currentdiff_btn.png" /> </imageobject><textobject>
                <phrase>現在の差異ボタン</phrase>
              </textobject>
            </inlinemediaobject>
<guibutton>現在の差異</guibutton>をクリック (または、<keycombo> <keycap>Alt</keycap>
<keycap>Enter</keycap>
</keycombo>キーを押下)してください。このボタンが使えない(例えば、カーソルが違う行にある)時は、 代わりに、<inlinemediaobject>
<imageobject> <imagedata contentdepth="15"
fileref="screenshots/firstdiff_btn.png" /> </imageobject><textobject>
                <phrase>最初の差異ボタン</phrase>
              </textobject>
            </inlinemediaobject>最初の差異をクリック(または、<keycombo>
<keycap>Alt</keycap> <keycap>Home</keycap> </keycombo>キーを押下)してください。</para>

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

          <mediaobject>
<imageobject> <imagedata contentwidth="588"
fileref="screenshots/filecomp_diffpane1.png" /> </imageobject><textobject>
              <phrase>ファイル比較の差異ペイン</phrase>
            </textobject>
          </mediaobject>
          <para></para>
        </listitem>

        <listitem>
          <para>ツールバーの、<inlinemediaobject>
<imageobject> <imagedata contentdepth="15"
fileref="screenshots/nextdiff_btn.png" /> </imageobject><textobject>
                <phrase>次の差異ボタン</phrase>
              </textobject>
            </inlinemediaobject><guibutton>次の差異</guibutton>をクリック (または、<keycombo>
<keycap>Alt</keycap> <keycap>Enter</keycap> </keycombo>キーを押下)してください。
これは、同じ行(差異ではない)を飛び越し、 最後の行を選択します。</para>

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

  <section id="Intro_diffs_merging">
    <title>ファイルのマージ<indexterm>
        <primary>差異をマージする</primary>

        <secondary>概要と例</secondary>
      </indexterm></title>

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

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

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

    <para>比較時と同様に、WinMerge
のツールバー（またはキーボードショートカット）を使って差異を順に確認します。各差異について、左または右の内容を反対側にコピーして解決します。すべての差異を解決した時、
WinMergeは、すべての差異が解決されたことを知らせ、 マージ作業を完了します。</para>

    <section>
      <title>単純なマージ操作</title>

      <para>この簡単な例では、ファイル比較ウィンドウのコントロールを、 先に示したシンプルなファイルを体系的にマージするために、どのように使用するかを示しています。</para>

      <orderedlist>
        <listitem>
          <para>ツールバーの、<inlinemediaobject>
<imageobject> <imagedata contentdepth="15"
fileref="screenshots/currentdiff_btn.png" /> </imageobject><textobject>
                <phrase>現在の差異ボタン</phrase>
              </textobject>
            </inlinemediaobject>
<guibutton>現在の差異</guibutton>ボタンをクリックして、 最初の差異を選択してください。このボタンが使えない場合、
代わりに、<inlinemediaobject>
<imageobject> <imagedata contentdepth="15"
fileref="screenshots/firstdiff_btn.png" /> </imageobject><textobject>
                <phrase>最初の差異ボタン</phrase>
              </textobject>
            </inlinemediaobject>
<guibutton>最初の差異</guibutton>ボタンを クリックしてください。</para>
        </listitem>

        <listitem>
          <para><inlinemediaobject>
<imageobject> <imagedata contentwidth="17"
fileref="screenshots/copyr_button.png" /> </imageobject><textobject>
                <phrase>右側へコピーボタン</phrase>
              </textobject>
            </inlinemediaobject>
<guibutton>右側へコピー</guibutton>をクリックすると、
<filename>File1</filename>から、<filename>File2</filename>へ、 一つの差異がマージされます。
<filename>File2</filename>の中の差異1行が、 <filename>File1</filename>の2行で置き換えられ、
灰色の空行が無くなっていることに注意してください。</para>
        </listitem>

        <listitem>
          <para><inlinemediaobject>
<imageobject> <imagedata contentdepth="15"
fileref="screenshots/nextdiff_btn.png" /> </imageobject><textobject>
                <phrase>次の差異ボタン</phrase>
              </textobject>
            </inlinemediaobject>
<guibutton>次の差異</guibutton>をクリックすると、 2番目の差異を選択します。これは、差異を自分で発見して選択するより簡単です。
そして、すべての差異を端から端まで難なく調べたいなら、特に便利です。</para>
        </listitem>

        <listitem>
          <para><inlinemediaobject>
<imageobject> <imagedata contentwidth="17"
fileref="screenshots/copyl_button.png" /> </imageobject><textobject>
                <phrase>左側へコピーボタン</phrase>
              </textobject>
            </inlinemediaobject> <guibutton>左側へコピー</guibutton>
をクリックすると、 2番目の差異を、<filename>File2</filename>から、
<filename>File1</filename>へマージします。</para>

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

          <mediaobject>
<imageobject> <imagedata contentwidth="600"
fileref="screenshots/filemerged1.png" format="PNG" /> </imageobject></mediaobject>
          <para></para>
        </listitem>

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

        <listitem>
          <para><keycombo> <keycap>Ctrl</keycap> <keycap>S</keycap>
</keycombo>を押下して変更を保存してください。</para>
        </listitem>
      </orderedlist>

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

    <section>
      <title>マージしたファイルの保存先を選択<indexterm>
          <primary>差異をマージする</primary>

          <secondary>結果ファイル</secondary>
        </indexterm><indexterm>
          <primary>結果ファイル、マージ中</primary>
        </indexterm></title>

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

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

      <para>同様に、WinMergeの <xref linkend="Command_line" />で説明されている、
任意の<option>outputfile</option>引数を使用して、
両方(または3つすべて)のソースファイルが変更されていない状態のままにしておくことができます。</para>
    </section>
  </section>
</article>
