Pocket

DiffMergeとは

DiffMergeは、SourceGear社が開発している、無料のGUIのdiffツールです。Windows、MacOS、Linuxに対応しています。

多くのGUI diffツールと同じく、フォルダ同士の比較、ファイル同士の比較ができます。

特に気に入っているわけではありませんが、Joen On Softwareという本で知っていらい、Windows、MacOS、Linuxどれでも使えることもあり、なんとなく使っています。

ファイルの比較

ターミナルのdiffコマンドは、ファイル内容が同じかどうかの確認には、よく使います。でも、どの行が違うかなど差分の詳細を見るには、使いづらいです。

GUI diffツールは、どの行が違うかだけでなく、行の中のどの部分が違うかを強調表示してくれます。

フォルダの比較

放置ブランチとmasterブランチを比較するときに使います。具体的には、放置ブランチを別のフォルダにチェックアウトしておき、masterブランチのフォルダを比較します。削除しても問題ないことを確認してから、放置ブランチを削除します。

かつて日付フォルダ管理だった頃は、diffツールでフォルダ比較していました。最近は、ほとんどのプロジェクトをgit管理するようになったので、日付フォルダをdiffすることはなくなりました。

git difftool

Sourcetreeやgit gui、git diffコマンドの差分表示は、充分わかりやすいです。多くの場合は、これですんでしまいます。

ただし、変更箇所が多かったり、微妙な変更を確認したい場合は、DiffMergeを使うと、確認しやすいです。左側に変更前のファイル全行、右側に変更後のファイル全行が表示されるので、一覧性は抜群にいいです。

DiffMergeをインストールした後、最初の一回だけ、gitのグローバル設定の diff.tool に "diffmerge --nosplash" を登録します。そして、git difftoolと実行します。

$ git config --global --add diff.tool "diffmerge --nosplash"
$ git difftool

インストール

公式サイトからダウンロード

sourcegear > Downloads > DiffMerge のページを表示します。

一覧の、「Ubuntu 12.04 LTS("Precise") and newer (64bit)」 にチェックをつけて、「Download Now」ボタンをクリックします。

ターミナルでwgetでダウンロードするなら、

$ cd ~/Downloads
$ wget http://download.sourcegear.com/DiffMerge/4.2.0/diffmerge_4.2.0.697.stable_amd64.deb

aptコマンドで、ダウンロードしたdebファイルをインストールします。

$ cd ~/Downloads
$ sudo apt install ./diffmerge_4.2.0.697.stable_amd64.deb

libpng12-0

ところが「依存: libpng12-0 (>= 1.2.13-4) しかし、インストールすることができません」と表示されて、DiffMergeをインストールできませんでした。

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
注意、'./diffmerge_4.2.0.697.stable_amd64.deb' の代わりに 'diffmerge' を選択します
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 diffmerge : 依存: libpng12-0 (>= 1.2.13-4) しかし、インストールすることができません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

次のようにして、libpng12-0をインストールしてください。その後、DiffMergeをインストールしてください。

$ cd ~/Downloads
$ wget http://security.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
$ sudo apt install ./libpng12-0_1.2.54-1ubuntu1.1_amd64.deb

# diffmergeをインストール
$ sudo apt install ./diffmerge_4.2.0.697.stable_amd64.deb

libcanberra-gtk

DiiffMergeのインストールが完了し、DiiffMergeを起動したところ、ターミナルに「Failed to load module "canberra-gtk-module"」と表示されました。DiffMergeは起動できるし、動きに問題ないようです。

$ diffmerge
Gtk-Message: 10:36:23.925: Failed to load module "canberra-gtk-module"

canberra-gtk-moduleは、サウンド関係のモジュールのようです。メッセージが気になる場合は、canberra-gtk-moduleをインストールしてください。

$ sudo apt install libcanberra-gtk*

起動方法

ターミナルから起動するときは、最後に & をつけて、起動します。

$ diffmerge &

# スプラッシュ画面を表示しないで起動する
$ diffmerge --nosplash &

日本語設定

インストール直後は、日本語が文字化けしてしまうので、次の設定をします。

メニュー[DiffMerge] > Preferences...

左ペイン > File Windows > Rulesets

Default Ruleset の [Edit...]ボタン

Fallback Caharacter Encoding Optionsの一覧から
Use Named Encoding Below にチェックをつけて

Try Named Character Encodings下の
最初のプルダウンを「Unicode 8 bit (UTF-8) 」に選択して、

[OK]ボタン

それでも、日本語が文字化けするときは、拡張子ごとの設定が優先されているので、拡張子ごとの設定をオフにします。

メニュー[DiffMerge] > Preferences...

左ペイン > File Windows > Rulesets

Custom Rulesetsの下
Enable Custome Rulesetsのチェックをはずします。

[OK]ボタン

DiffMergeを知ったきっかけ

DiffMergeを知ったのは、Joel Spolsky著「Joel on Software」です。続編か続々編だったかもしれません。本の中で、SourceGear社、創業者・開発者のEric Sink、製品のDiffMergeをすすめていました。

そういえば、Eric Sink著「Eric Sink on the Business of Software 革新的ソフトウェア企業の作り方」も読んだことを思い出しました。

Joel Spolsky (著), 青木 靖 (翻訳) オーム社 2005/12