差分の表示

プロジェクト開発を進める上でもっとも共通の需要のひとつが、何を変更したかを確認するということです。同じファイルの2つのリビジョン間や、2つの異なるファイルの違いを確認したくなることがあるでしょう。 TortoiseSVN には、 TortoiseMerge というテキストファイルの差分を表示する内蔵ツールがあり、 TortoiseIDiff という画像ファイルの差分を見るためのツールもあります。もちろん、任意の差分プログラムを使うこともできます。

ファイルの差分

ローカルの変更

自分 が作業コピー内でどんな変更を行ったか確認する場合は、エクスプローラーのコンテキストメニューで TortoiseSVN差分を表示 を選択してください。

別のブランチ/タグとの差分

(ブランチで作業していて)トランクの変更点を見る場合や、(トランクで作業していて)特定のブランチの変更点を見る場合、エクスプローラーのコンテキストメニューを使用できます。 Shift キーを押したままファイルを右クリックし、 TortoiseSVNURL を指定して差分を表示 を選択してください。その後で表示されるダイアログでは、ローカルのファイルと比較するリポジトリの URL を指定してください。

2つのツリー、たとえば2つのタグや、ブランチ/タグとトランクを選択して差分を取るときは、リポジトリブラウザーを使用することもできます。そこでコンテキストメニューの リビジョンを比較 を使用することで比較ができます。 「フォルダーの比較」をご覧ください。

以前のリビジョンとの差分

特定のリビジョンと作業コピーの差分を取る場合は、リビジョンログダイアログを使用します。比較したいリビジョンを選択し、コンテキストメニューから 作業コピーと比較 を選択してください。

最後にコミットしたリビジョンと、変更されていないと思われる自分の作業コピーとの差分を見る場合は、単にファイルを右クリックし、TortoiseSVN直前のバージョンとの差分を表示 を選択してください。ここでは、(作業コピーに記録されている)最終コミット日時以前のリビジョンと、作業ベースとの差分を表示します。これにより、現在の作業コピーの元となる直前の変更点を参照できます。作業コピーよりも新しい変更点は表示されません。

2つのリビジョン間の差分

すでにコミットした2つのリビジョン間の差分を取るのなら、リビジョンログダイアログを使用し、(通常 Ctrl を使用して)比較したい2つのリビジョンを選択してください。それから、コンテキストメニューで リビジョンを比較 を選択してください。

フォルダーのリビジョンログから行った場合、リビジョン比較ダイアログが現れ、フォルダーにある変更されたファイルの一覧を表示します。 「フォルダーの比較」をご覧ください。

コミットしたすべての変更

特定のリビジョンで行ったすべてのファイルの変更点を一目で確認したいなら、Unified差分ファイル(GNUパッチ形式)を使用できます。ここでは差分が本文内の数行のみで表示されます。視覚的なファイル比較よりは読みにくくなりますが、すべての変更を一度に確認できます。リビジョンログダイアログから確認したいリビジョンを選択し、コンテキストメニューから Unified形式で差分を表示 を選択してください。

ファイル間の差分

2つの異なるファイルの差分を確認したい場合、エクスプローラーで直接両方(Ctrl を押しながら)選択してください。その後、エクスプローラーのコンテキストメニューからTortoiseSVN差分 を選択します。

差分を表示するファイルが同じフォルダーにない場合、TortoiseSVN差分元として選択コマンドで比較する1つ目のファイルを選択し、それから2つ目のファイルを表示してTortoiseSVN"<パス名>"との差分を表示</パス名>

作業コピーのファイル・フォルダーと URL 間の差分

作業コピーのファイルと、 Subversion リポジトリのファイルとの差分を確認する場合は、エクスプローラーで直接そのファイルを選択し、 Shift キーを押しながら右クリックしてコンテキストメニューを表示させ、TortoiseSVNURL を指定して差分を表示 を選択してください。作業コピーのフォルダーの場合も同様です。 TortoiseMerge ではパッチファイルの場合の同様、変更のあったファイルの一覧が表示され、それぞれの差分を個別に確認できます。

注釈履歴の差分

リビジョンログダイアログから差分と注釈履歴を組み合わせて表示させ、ファイルの差分ばかりでなく、作者、リビジョン、更新日時を確認することができます。詳しくは、 「注釈履歴の差分」 をご覧ください。

フォルダー間の差分

TortoiseSVN の内蔵ツールは、ディレクトリ階層の比較をサポートしていません。しかし、その機能をサポートしている外部ツールを使えばディレクトリを比較できます。 「外部差分・マージツール」 で使用できるツールをご紹介します。

サードパーティの差分ツールを設定している場合、差分コマンドを選択する際にShift を押すと代替ツールを使用できます。その他の差分ツールの設定については、 「外部プログラムの設定」 をご覧ください。

改行コードと空白のオプション

プロジェクトを続けていくと、時には改行コードを CRLF から LF に変更したり、セクションのインデントを変更したりすることがあります。不幸なことに、かなりの行を変更しなければならないにもかかわらず、コードの意味に変化はありません。以下のオプションでは、比較や差分を適用する際の変更点の把握方法を管理します。これらの設定は、 TortoiseMerge の設定のほか、 マージ注釈履歴 ダイアログから行うことができます。

改行コードを無視する は、改行コードのみの変更を無視します。

空白を比較する は、インデントや行内の空白の追加・削除を変更点に含めます。

空白の変更を無視する は、空白の数や種類(インデントや、タブとスペースの変更など)のみの変更を無視します。空白がないところに追加されたり、存在する空白が完全に削除されたりした場合は、変更として表示されます。

すべて空白を無視する は、空白のみの変更をすべて無視します。

当然、内容の変更のある行は、常に差分に含まれます。

フォルダーの比較

図4.27 リビジョンの比較ダイアログ

リビジョンの比較ダイアログ


リポジトリブラウザーで2つのツリーを選択したり、ログダイアログでフォルダーのの2つのリビジョンを選択したりすると、 コンテキストメニューリビジョンを比較 が実行できるようになります。

このダイアログでは、変更されたすべてのファイルが表示され、コンテキストメニューから個々に比較や注釈履歴の取得を行えます。

変更ツリー をエクスポートすることができます。これは、プロジェクトのツリー構造の中で、変更されたファイルのみを他人に渡したい場合に便利です。この操作は選択したファイルにのみ作用しますので、あらかじめエクスポートするファイル(通常はすべて)を選択してから、 コンテキストメニュー選択をエクスポート... を実行してください。そして、変更ツリーを保存する場所を指定してください。

また、 コンテキストメニュー選択ファイルのリストを保存... を使用すると、変更されたファイルの 一覧 をエクスポートすることができます。

ファイルの一覧 行われた操作(変更・追加・削除)をエクスポートする場合、 コンテキストメニュー選択範囲をクリップボードにコピー を使用してください。

最上部のボタンは、比較の方向を変更します。AからBへの変更を表示しているとき、必要に応じて、BからAへの変更も表示できます。

リビジョン番号が表示されているボタンで、リビジョン範囲を変更することができます。範囲を変更すると、2つのリビジョン間の差分が自動的に更新されます。

ファイル名の一覧が非常に長い場合、検索ボックスを使用して、特定のテキストを含むファイル名のみを抽出できます。単純文字列検索を行いますので、Cのソースファイルを指定したい場合は、 *.c ではなく .c と指定してください。

TortoiseIDiff を使用した画像の差分

テキストファイルの差分を取るツールは、 TortoiseMerge を含めてたくさんありますが、私たちはよく画像ファイルに、どんな変更が加えられたかを知りたくなることもありました。そのために TortoiseIDiff を作成しました。

図4.28 画像差分ビューアー

画像差分ビューアー


一般的な画像ファイル形式のファイルを選択して TortoiseSVN差分を表示 を実行すると、画像の差分を表示するために TortoiseIDiff が起動します。デフォルトでは画像が横に並んで表示されますが、表示メニューやツールバーで上下に表示するように切り替えることができます。また、ライトボックスを使用した時のように、画像を重ねて表示することもできます。

画像をズームイン・アウトしたり、移動したりすることもできます。画像を左ドラッグすることで、移動することができます。 画像位置を同期 オプションを選択しておくと、スクロールバーやマウスホイールで画像を移動する時、両方の画像が同期して移動するようになります。

画像情報ボックスには、ピクセル単位のサイズや、解像度、色深度など、画像ファイルの詳細を表示されます。このボックスが邪魔になるなら、 表示画像情報 で隠すことができます。これと同じ情報は、画像のタイトルバーの上にマウスを移動すると表示されます。

画像を重ねて表示している場合、画面左端のスライダーを使用して、画像の相対的な輝度(アルファブレンド)を制御できます。スライダー上をクリックすると、透明度を直接設定できますし、スライダをドラッグすると、確認しながら透明度を変更できます。 Ctrl+Shift+ホイール でも透明度を変更できます。

スライダの上にあるボタンを押すと、透明度を 0% と 100% で切り替えられます。また、ボタンをダブルクリックすると、もう一度ボタンをクリックするまで、1秒ごとに透明度を自動で交互に切り替わります。複数の小さな変更を探すのに便利でしょう。

重ね合せでは分からない差分を確認したい場合もあります。プリント基板の画像イメージに2つのリビジョンがあり、どの配線が変更されたかを調べたい場合などです。アルファブレンドを無効にすると、各ピクセルの色が XOR されて差分が表示されます。変更のない部分は真っ白になり、変更点だけ色が表示されます。

Office ドキュメントの差分

テキストファイル以外の文書の差分を表示するには、ファイルフォーマットを理解できるソフトウェアを使用する必要があります。通常は、その文書を作成するために使用したソフトウェアを使用します。よく使用される Microsoft Office や OpenOffice.org には差分を表示するための機能があり、 TortoiseSVN には有名な拡張子のファイルの差分を表示する際に、これらのソフトウェアをしかるべき設定で呼び出すことができるスクリプトが添付されています。どのような拡張子がサポートされているかを確認したり、新しく追加したりするためには、 TortoiseSVN設定を実行し、 外部プログラム セクションの 高度な設定 をクリックしてください。

Office 2010 使用時の問題

Office 2010 の クイック実行 版をお使いの場合、文書の差分を表示しようとすると、 Windows Script Host から、 ActiveX コンポーネントはオブジェクトを作成できません: word.Application というようなエラーが表示されることがあります。差分機能を使用するには、 MSI 版の Office を使用する必要があるようです。

外部差分・マージツール

私たちが提供するツールで必要なことが実現できない場合は、オープンソース・商用のツールがたくさんあるので、その中から使用できるものを試してみてください。それぞれに特徴がありますし、この一覧は完全なものではありませんが、検討に値するものをいくつか以下に紹介します。

WinMerge

WinMerge は、ディレクトリの差分も扱える画期的なオープンソースの差分ツールです。

Perforce Merge

Perforce は商用の RCS ですが、差分・マージツールは無料でダウンロードできます。詳細な情報は Perforce をご覧ください。

KDiff3

KDiff3 は、ディレクトリも扱えるフリーの差分ツールです。 こちら からダウンロードできます。

SourceGear DiffMerge

SourceGear Vault は商用の RCS ですが、差分・マージツールは無料でダウンロードできます。詳細な情報は SourceGear をご覧ください。

ExamDiff

ExamDiff Standard はフリーウェアです。ファイルを扱えますが、ディレクトリは扱えません。 ExamDiff Pro はシェアウェアで、ディレクトリに対する差分や編集機能などたくさん追加されています。どちらもバージョン 3.2 以降なら unicode を扱えます。 PrestoSoft からダウンロードできます。

Beyond Compare

ExamDiff Pro に似て、ディレクトリの差分と unicode を扱えるすばらしいシェアウェアです。 Scooter Software からダウンロードしてください。

Araxis Merge

Araxis Merge はファイルやフォルダーの両方に対応した、差分やマージに便利な商用ツールです。マージ時に3方向の比較を行うことができ、また関数の順番の変更に対応できる同期リンク機能を持っています。 Araxis からダウンロードしてください。

TortoiseSVN でこれらのツールを使用するよう設定する方法は 「外部プログラムの設定」 をご覧ください。