Git difftoolでWinMergeを使う設定方法と差分比較の手順
Git difftoolとWinMergeでまず押さえるポイント
Gitの差分をWinMergeで確認したい場合は、Git側でWinMergeをdifftoolとして登録してから、比較したい対象に応じてgit difftoolを実行する流れになります。
一度設定しておけば、普段のGit操作を大きく変えることなく、必要なときだけWinMergeを呼び出して差分を確認できます。
ターミナル上の差分表示が見づらいと感じている場合や、変更箇所を左右に並べて確認したい場合は、WinMergeを組み合わせると内容を追いやすくなります。
ただし、すべての差分確認をWinMergeへ置き換える必要はなく、変更量や確認したい内容に応じてgit diffと使い分けるのが実用的です。
git diffとgit difftoolの違い
git diffは差分をターミナル上に表示するための基本的なコマンドです。
ファイル内の変更行をその場ですぐ確認できるため、小さな修正や数行程度の変更であればgit diffだけでも十分に確認できます。
一方のgit difftoolはgit diffの比較機能を外部の差分ツールから利用するためのコマンドで、WinMergeを設定しておけば左右に並べた画面で変更前後を確認できます。
Gitが比較対象を判断し、その比較結果を外部ツールへ渡すため、Gitの履歴管理とWinMergeの視覚的な比較機能を組み合わせて利用できます。
そのため、数行だけの変更を素早く確認するときはgit diff、複数行や複数ファイルの変更を目で追いたいときはgit difftoolという使い分けがしやすいです。
ターミナルで作業している途中に軽く確認したい場合はgit diffを使い、コミット前に変更内容をじっくり見直したい場合はWinMergeを使うという運用もできます。
どちらか一方だけを選ぶというより、変更量や確認目的によって使い分けると、余計な操作を増やさずに差分確認を行えます。
WinMergeが向いているケース
WinMergeは変更前と変更後を左右に並べて見られるため、差分の前後関係を視覚的に確認したい場合に向いています。
たとえば、同じファイルの複数箇所を修正した場合や、設定ファイルの値をまとめて変更した場合は、ターミナル上の差分より全体像を追いやすくなります。
変更箇所の周辺行も見ながら確認できるため、「どの処理の中で変更したのか」「変更前後で構造がどう変わったのか」といった点を確認したい場合にも便利です。
複数のファイルを修正したあとにコミット内容を見直す場面では、変更した記憶だけに頼らず、実際の差分を画面上で確認できます。
特に、リファクタリングや設定変更などで変更行が増えた場合は、差分の位置を視覚的に追えることがメリットになります。
WinMergeを使わなくてもよいケース
変更が数行だけで内容も単純な場合は、毎回WinMergeを起動するよりgit diffで確認したほうが早いことがあります。
たとえば、変数名を1か所変更しただけの場合や、設定値を1行だけ修正した場合は、ターミナル上で差分を見たほうが操作を増やさずに済みます。
また、普段からターミナル上のdiff表示に慣れており、変更内容を十分に把握できる場合も、無理に外部ツールを起動する必要はありません。
WinMergeは差分確認を補助するための選択肢なので、変更の大きさに応じて使うかどうかを決めると効率的です。
WinMergeをGitの差分ツールにする前の準備
設定を始める前に、GitとWinMergeが利用できることと、WinMergeU.exeの保存場所を確認しておきます。
とくに実行ファイルのパスが違っていると、Git側の設定が正しくてもWinMergeを起動できないため、最初に確認しておくと切り分けが楽になります。
設定コマンド自体は多くありませんが、実行環境が確認できていない状態で設定すると、起動しない原因がGitなのかWinMergeなのか判断しにくくなります。
最初にGitとWinMergeをそれぞれ単独で確認してから連携設定へ進むことで、問題が起きた場合も確認箇所を絞りやすくなります。
GitとWinMergeが利用できることを確認する
まずGit Bashなどのターミナルを開き、Gitが利用できるか確認します。
git –version
バージョン情報が表示されれば、Gitコマンドを実行できる状態です。
普段からgit statusやgit logなどを利用している環境であれば、基本的にはそのまま設定へ進めます。
次にWinMergeを通常どおり起動し、アプリ自体が問題なく開くことも確認します。
スタートメニューやショートカットからWinMergeを起動できれば、少なくともWinMerge本体が利用できる状態であることを確認できます。
Git側とWinMerge側を別々に確認しておけば、後でgit difftoolが動かなかったときに原因を絞り込みやすくなります。
Gitは動くがWinMergeを単体で起動できない場合は、Gitの設定より先にWinMerge側の状態を確認する必要があります。
反対に、WinMergeは起動できるのにgit difftoolからだけ起動できない場合は、Git側のツール設定や実行ファイルパスを中心に確認できます。
WinMergeU.exeの場所を確認する
WinMergeをGitから起動するには、GitがWinMergeU.exeの場所を認識できるように設定します。
一般的なインストール先の例は次のとおりです。
C:\Program Files\WinMerge\WinMergeU.exe
ただし、インストール時に保存先を変更している場合や、異なる構成で導入している場合はパスが変わります。
記事の例をそのまま入力するのではなく、エクスプローラーなどで自分の環境のWinMergeU.exeを確認してから設定してください。
WinMergeのショートカットがある場合でも、Gitへ登録するときに必要なのはショートカットそのものではなく、実際に起動されるWinMergeU.exeの場所です。
パスにProgram Filesのような空白を含む場合もあるため、設定時には引用符を含めた記述にも注意します。
この実行ファイルパスは、後からWinMergeが起動しなくなった場合にも確認する項目になるため、どこへインストールされているか把握しておくと便利です。
グローバル設定とリポジトリ単位設定の違い
git configに–globalを付けると、基本的にはそのユーザー環境の複数リポジトリで同じ設定を利用できます。
いつもWinMergeを使いたい場合は、–globalを付けて設定しておくと毎回登録する手間を減らせます。
複数のGitリポジトリで開発しており、どのリポジトリでもWinMergeを使いたい場合は、グローバル設定にしておくと管理しやすくなります。
一方で、特定のリポジトリだけWinMergeを使いたい場合は、そのリポジトリへ移動して–globalを付けずに設定します。
たとえば、仕事用のリポジトリでは別の差分ツールを使い、個人用のリポジトリだけWinMergeを使うといった運用もできます。
どこまで設定を適用したいのかを決めてからコマンドを実行すると、意図しないリポジトリまで設定が変わることを防ぎやすくなります。
Git difftoolにWinMergeを設定する方法
準備ができたら、Git側にWinMergeを差分ツールとして登録します。
基本となるのは、使用するツール名、WinMergeU.exeのパス、起動前の確認メッセージという3つの設定です。
それぞれ別の役割を持つため、まとめて入力するだけでなく、何を設定しているのか把握しておくとトラブル時にも確認しやすくなります。
設定後は登録値を確認し、実際にgit difftoolを実行してWinMergeが起動するところまで確認しておくと安心です。
使用する差分ツールをWinMergeに設定する
まず、git difftoolで使う既定の差分ツールをWinMergeに設定します。
git config –global diff.tool winmerge
Gitにはwinmergeというdiff tool名が用意されているため、diff.toolへwinmergeを指定できます。
この設定によって、git difftoolを実行したときに利用する外部差分ツールとしてWinMergeを選択する形になります。
ただし、この時点ではWinMergeU.exeの場所まで指定していないため、続けて実行ファイルのパスも登録します。
特定のリポジトリだけで設定する場合は、対象リポジトリで–globalを外して実行します。
git config diff.tool winmerge
グローバル設定とローカル設定を混在させる場合は、自分がどちらへ登録したのか覚えておくと、後で設定値を確認するときに迷いにくくなります。
WinMergeU.exeのパスを登録する
次に、GitがWinMergeU.exeを見つけられるように実行ファイルのパスを登録します。
git config –global difftool.winmerge.path “C:/Program Files/WinMerge/WinMergeU.exe”
Git BashからWindowsのパスを設定する場合は、上のようにスラッシュ区切りで指定すると扱いやすくなります。
WinMergeを別フォルダーへインストールしている場合は、必ず実際の保存場所に置き換えてください。
ここで存在しないパスを登録すると、diff.toolがwinmergeになっていてもWinMergeを正常に起動できません。
設定後にトラブルが発生した場合は、まずこの値と実際のWinMergeU.exeの場所が一致しているか確認するとよいでしょう。
特定のリポジトリへだけ設定する場合は、diff.toolと同様に–globalを外して登録します。
起動前の確認メッセージを無効にする
git difftoolは外部ツールを起動する前に確認を求める動作があり、ファイルごとの確認を省きたい場合はdifftool.promptをfalseに設定できます。
git config –global difftool.prompt false
この設定を入れると、git difftoolを実行した際に確認を挟まずWinMergeを起動しやすくなります。
変更ファイルを頻繁にWinMergeで確認する場合は、毎回確認へ応答する手間を減らせます。
一方で、外部ツールを起動する前に毎回確認したい場合は、無理にfalseへ変更する必要はありません。
設定を変えたくない場合でも、実行時に–no-promptまたは-yを付ける方法があります。
git difftool –no-prompt
常に確認を省略したいのか、必要なときだけ省略したいのかによって使い分けるとよいでしょう。
登録した設定内容を確認する
設定が終わったら、実際に登録された値を確認します。
git config –global –get diff.tool
git config –global –get difftool.winmerge.path
git config –global –get difftool.prompt
それぞれwinmerge、実際のWinMergeU.exeのパス、falseが表示されれば、基本設定を確認できます。
設定直後に値を確認しておけば、WinMergeが起動しないときにパスの打ち間違いや設定範囲の違いを早く見つけられます。
リポジトリ単位で設定した場合は、確認時も–globalを付けずに値を確認します。
コマンドを入力しただけで設定完了と考えず、登録された値まで確認しておくことがトラブルを減らすポイントです。
Gitの差分をWinMergeで表示する方法
設定後は、Gitリポジトリのフォルダーへ移動してgit difftoolを実行します。
比較する対象によってコマンドが変わるため、何を確認したいのかを先に決めてから使うと混乱しません。
特に、未ステージの変更とステージ済みの変更では比較対象が異なるため、「いま何を確認しようとしているのか」を意識すると使い分けやすくなります。
コミット間やブランチ間の比較も同じgit difftoolから実行できるため、基本的な指定方法を覚えておけばさまざまな場面へ応用できます。
作業ツリーの変更を比較する
まだgit addしていない変更をWinMergeで確認する場合は、引数なしでgit difftoolを実行します。
git difftool
この比較では、インデックスと現在の作業ツリーとの差分を確認できます。
ファイルを編集したものの、まだステージングしていない変更を確認したいときに使います。
コードを修正した直後に「どこを変更したのか」を確認したい場合は、まずこの方法を使うとわかりやすいです。
git addする前に差分を見直しておけば、意図していない変更が混ざっていないか確認することもできます。
ステージ済みファイルを比較する
git addした内容をコミット前に確認したい場合は、–stagedを付けて実行します。
git difftool –staged
–cachedでも同じ用途の比較ができます。
git difftool –cached
この比較は、ステージ済みの内容とHEAD側の内容を確認したいときに使います。
コミット直前に「実際にコミット対象になっている変更」を確認したい場合は、通常のgit difftoolではなく–stagedを付ける点が重要です。
作業ツリーにまだステージしていない変更が残っている場合でも、–stagedを使えばステージ済みの内容に対象を絞って確認できます。
コミットする内容を最後にチェックする用途として覚えておくと便利です。
特定のファイルだけを比較する
変更ファイルが多く、1つだけWinMergeで見たい場合は–の後ろにファイルパスを指定します。
git difftool — src/main/java/Sample.java
対象ファイルを絞れば、変更ファイルすべてを順番に開く必要がなく、確認したい箇所へすぐ移れます。
大量のファイルを編集している最中に、特定の設定ファイルだけ確認したい場合にも使いやすい方法です。
ファイル名だけではなくリポジトリ内のパスを適切に指定することで、目的のファイルへ対象を限定できます。
変更ファイル数が多い場合は、最初から全ファイルを開くより、必要なファイルだけ指定したほうが確認作業を短縮できることがあります。
直前のコミットとの差分を比較する
現在のコミットと1つ前のコミットを比較したい場合は、次のように指定できます。
git difftool HEAD~1 HEAD
HEADは現在参照しているコミットを表し、HEAD~1はその1世代前を表します。
直前のコミットで何が変わったのかをWinMergeで見たい場合に使いやすい指定です。
コミット後に変更内容をもう一度確認したい場合や、直近のコミットに含まれた修正を視覚的に確認したい場合に利用できます。
作業ツリーの未コミット変更を見る方法とは用途が異なるため、履歴同士を比較していることを意識して使います。
2つのコミットを比較する
任意の2つのコミットを比較する場合は、比較したいコミットを2つ指定します。
git difftool abc1234 def5678
実際には自分のリポジトリで識別できるコミットハッシュや参照名へ置き換えます。
過去のある時点から別の時点までに、どのファイルの内容が変わったのかを確認したい場合に利用できます。
機能追加前後のコミットを比較したり、不具合が発生する前後のコードを見比べたりする場合にも使えます。
コミット数が多いプロジェクトでは、git logなどで比較したい地点を確認してからgit difftoolへ指定すると作業しやすくなります。
ブランチ間の差分を比較する
2つのブランチを比較したい場合は、コミットの代わりにブランチ名を指定できます。
git difftool main feature/sample
この例ではmainとfeature/sampleが指している内容を比較します。
ブランチ間の変更をレビューしたい場合や、作業ブランチが基準ブランチからどの程度変わっているかを確認したい場合に使えます。
機能ブランチで複数ファイルを変更している場合は、WinMergeで左右に並べることで変更箇所を追いやすくなります。
ただし、ブランチ比較では「どの2地点を比較したいのか」を意識し、目的に合ったブランチやコミットを指定することが大切です。
比較対象別のコマンド早見表
比較対象を先に決めておくと、git difftoolのオプションを選びやすくなります。
| 確認したい内容 | コマンド例 | 向いている場面 |
|---|---|---|
| 未ステージの変更 | git difftool | 編集中の変更を確認したい |
| ステージ済みの変更 | git difftool –staged | コミット対象を確認したい |
| 特定ファイル | git difftool — path/to/file | 1ファイルだけ確認したい |
| 直前コミットとの比較 | git difftool HEAD~1 HEAD | 直前の変更内容を確認したい |
| 2コミット間 | git difftool commitA commitB | 任意の2時点を比較したい |
| ブランチ間 | git difftool branchA branchB | ブランチの内容差を確認したい |
迷ったときは、現在編集中の差分なのか、ステージ済みなのか、履歴上の2地点なのかを切り分けるとコマンドを選びやすくなります。
普段よく使うのは、未ステージ確認のgit difftoolと、コミット前確認のgit difftool –stagedです。
履歴を調査するときはコミット指定、機能ブランチの変更全体を見たいときはブランチ指定というように、目的ごとに覚えておくと迷いにくくなります。
変更ファイルが多いときはフォルダー単位で比較する
変更ファイルが多い場合は、通常のgit difftoolで1ファイルずつ確認するより、–dir-diffを使ってフォルダー単位で比較したほうが見通しがよくなることがあります。
Gitの–dir-diffは変更されたファイルを一時的な場所へ用意し、外部ツールでディレクトリ比較を行うためのモードです。
1つずつファイルを開いて確認する方法と、変更されたファイル全体をフォルダー構成から確認する方法では使い勝手が異なります。
変更量が増えてきた場合は、ファイル単位の確認にこだわらず、–dir-diffへ切り替えると作業しやすくなることがあります。
git difftool –dir-diffの使い方
フォルダー単位で差分を確認する場合は、次のコマンドを実行します。
git difftool –dir-diff
短縮形の-dも利用できます。
git difftool -d
WinMergeがフォルダー比較として起動すれば、変更対象を一覧しながら確認できます。
ファイルを順番に開くより全体を眺めやすいため、変更ファイル数が多いときに便利です。
どのフォルダーで変更が発生しているのかを見ながら確認できるため、複数ディレクトリへまたがる修正を行った場合にも全体像をつかみやすくなります。
大きなリファクタリングや設定ファイルの一括変更など、変更ファイル数が増えやすい作業では選択肢として覚えておくと便利です。
通常のdifftoolとdir-diffを使い分ける
通常のgit difftoolは、変更されたファイルを個別に確認したい場合に向いています。
一方の–dir-diffは、複数ファイルの変更をフォルダー構成も含めて見渡したい場合に向いています。
数ファイルを順番に丁寧に確認するなら通常のdifftool、変更対象が多く一覧性を優先するなら–dir-diffという考え方がわかりやすいです。
たとえば、2〜3ファイルだけ変更した場合は通常のdifftoolでも十分に確認しやすいです。
一方で、十数ファイル以上を変更していて全体を確認したい場合は、フォルダー比較のほうが目的のファイルを探しやすくなることがあります。
どちらが常に優れているというわけではなく、変更量と確認方法に合わせて選ぶのがポイントです。
変更ファイルが多い場合の注意点
通常のgit difftoolは外部diff toolをファイルごとに呼び出すため、変更ファイルが多いとWinMergeの起動や確認が何度も続くことがあります。
複数ファイルが対象になっている状態でWinMergeが繰り返し表示されても、必ずしも設定に失敗しているとは限りません。
一覧から対象を確認したい場合は–dir-diffへ切り替えると、フォルダー比較として扱いやすくなります。
逆に、1ファイルずつ順番を追って確認したい場合は、通常のdifftoolのほうが確認漏れを防ぎやすいこともあります。
自分が「一覧性を重視するのか」「1ファイルずつ確認するのか」を決めて使い分けるとよいでしょう。
WinMergeが起動しないときの確認項目
設定したのにWinMergeが起動しない場合は、原因を一度に決めつけず、Gitの設定、実行ファイル、WinMerge単体、比較対象の順で切り分けます。
複数の設定を一度に変更してしまうと、どこに原因があったのかわからなくなるため、1項目ずつ確認するのがポイントです。
特に多いのは、登録したWinMergeU.exeのパスと実際のインストール先が一致していないケースや、比較対象となる差分そのものが存在していないケースです。
まず現在の状態を確認し、それから必要な箇所だけ修正すると原因を追いやすくなります。
Gitに登録されているdifftool設定を確認する
最初に、Gitへ登録した設定値を確認します。
git config –global –get diff.tool
git config –global –get difftool.winmerge.path
git config –global –get difftool.prompt
diff.toolがwinmergeになっているか、difftool.winmerge.pathが実際の保存場所と一致しているかを確認します。
表示された値が自分で設定した内容と違う場合は、正しい値へ修正してからもう一度git difftoolを試します。
リポジトリ単位で設定している場合は、–globalを付けた確認だけでは目的の設定を確認できない場合があるため、どの範囲へ登録したかも見直します。
グローバル設定とローカル設定を混在させている場合は、設定範囲の違いも切り分けポイントになります。
WinMergeU.exeのパスを確認する
次に、登録したパスにWinMergeU.exeが実際に存在するか確認します。
標準的な例としてC:\Program Files\WinMerge\WinMergeU.exeがありますが、必ず自分の環境で実ファイルを確認してください。
WinMergeを再インストールした場合や、インストール先を変更した場合は、以前登録したパスが使えなくなっている可能性もあります。
エクスプローラーでWinMergeU.exeが存在する場所を確認し、git configで表示された値と見比べます。
パスが違っている場合は、Git側の設定を実際の場所へ合わせて修正します。
WinMergeU.exeを直接起動して確認する
Git経由の起動だけ失敗しているのか、WinMerge自体を起動できないのかを分けるため、WinMergeU.exeを直接実行します。
Git Bashで標準的なインストール先を試す例は次のとおりです。
“/c/Program Files/WinMerge/WinMergeU.exe”
この方法でWinMergeが起動するのであれば、WinMerge本体ではなくGit側の設定を中心に確認できます。
反対に直接実行しても起動できない場合は、difftool設定だけを何度も変更するより、WinMergeのインストール状態や実行ファイルの場所を先に確認したほうが効率的です。
「Gitから起動できない」のか「WinMergeそのものを起動できない」のかを切り分けることが重要です。
比較対象に差分があるか確認する
設定に問題がなくても、比較対象に差分がなければ期待した比較画面は開きません。
まず現在の状態を確認します。
git status
git diff –name-only
ステージ済みの変更を確認したい場合は、git diff –staged –name-onlyのように比較対象を合わせます。
未ステージの変更しかない状態でステージ済み比較を実行しても、期待した内容は表示されません。
反対に、すでにgit addした変更を通常のgit difftoolだけで確認しようとしている場合も、意図した差分と一致しているか確認する必要があります。
git difftoolに渡している比較条件と、実際に存在する差分の種類が一致しているかを確認することが大切です。
Git Bash・PowerShell・コマンドプロンプトの違いに注意する
git difftool自体はGitを利用できるターミナルから実行できますが、パスの書き方や引用符の扱いはシェルによって見え方が異なることがあります。
Git Bashで使用するパス表記と、PowerShellやコマンドプロンプトで直接実行するときのパス表記を混同すると、実行ファイルが存在していても入力方法で迷うことがあります。
問題が起きたときは、記事のコマンドを機械的に繰り返すより、設定値と実ファイルの場所を1つずつ照合してください。
利用しているターミナルが何かを確認し、その環境でWinMergeU.exeを直接起動できるか確かめると切り分けやすくなります。
マージツールとしてもWinMergeを使う方法
WinMergeは差分確認だけでなく、Gitのmergetoolとして設定してマージ競合の確認に利用することもできます。
ただし、difftoolは差分を見るための仕組みで、mergetoolは競合解消を支援するための仕組みなので、目的を分けて設定します。
普段の変更確認にWinMergeを使うだけであれば、mergetoolまで必ず設定する必要はありません。
mergeやrebaseで競合が発生したときにもWinMergeを利用したい場合に、追加設定として検討するとわかりやすいです。
git difftoolとgit mergetoolの違い
git difftoolは作業ツリー、ステージ済み内容、コミット間などの差分を外部ツールで確認するために使います。
git mergetoolはmergeやrebaseなどで競合が発生したあと、競合している内容を外部ツールで処理するときに使います。
つまり、difftoolは「違いを見る」ことが中心で、mergetoolは「競合した内容を確認して解消する」ことが中心です。
名前が似ているため混同しやすいですが、利用するタイミングは異なります。
競合解消にもWinMergeを使いたい場合だけ、mergetoolの設定を追加します。
WinMergeをmergetoolとして設定する
WinMergeをmergetoolとして使う場合は、merge.toolとWinMergeU.exeのパスを設定します。
git config –global merge.tool winmerge
git config –global mergetool.winmerge.path “C:/Program Files/WinMerge/WinMergeU.exe”
必要に応じて起動前の確認を省く設定も行えます。
git config –global mergetool.prompt false
difftool側ですでにWinMergeを設定していても、mergetoolでは別の設定項目を利用するため、競合解消にも使いたい場合は追加設定が必要です。
ここでもWinMergeU.exeのパスは自分の環境に合わせて変更します。
git mergetoolで競合を確認する
mergeやrebaseなどで競合が発生したあと、外部マージツールを起動する場合はgit mergetoolを実行します。
git mergetool
競合が発生していない状態で使うコマンドではないため、まずgit statusで現在の状態を確認してから実行すると状況を把握しやすくなります。
git statusでは競合しているファイルを確認できるため、どのファイルを処理する必要があるのか把握してからWinMergeを起動できます。
WinMergeを開いたあとは、どの内容を採用するかを確認しながら競合を解消し、Git側でも解消後の状態を確認してください。
競合解消は単なる差分確認とは異なるため、内容を確認せず機械的に片方だけを採用しないことが重要です。
Git difftoolとWinMergeのよくある質問
ここでは、WinMergeをGitの差分ツールとして使うときに迷いやすいポイントをまとめます。
設定方法を覚えていても、実際に運用し始めると「どのコマンドを使えばよいのか」「設定範囲を変更できるのか」といった疑問が出てきます。
よくあるポイントを把握しておけば、設定を最初からやり直さなくても対応できるケースがあります。
git diffを実行してもWinMergeが起動しないのはなぜ?
git diffは差分をターミナルへ表示するコマンドなので、WinMergeを外部差分ツールとして起動したい場合はgit difftoolを使います。
diff.toolへwinmergeを設定していても、git diffそのものが自動的にWinMergeへ置き換わるわけではありません。
ターミナルで確認したいときはgit diff、WinMergeで確認したいときはgit difftoolと覚えておくと迷いにくくなります。
設定が正しいのにgit diffでWinMergeが起動しない場合は、設定不良ではなく使用しているコマンドの違いを確認してください。
リポジトリごとに異なる差分ツールを設定できる?
リポジトリ単位で設定したい場合は、対象リポジトリへ移動して–globalを付けずにgit configを実行します。
git config diff.tool winmerge
git config difftool.winmerge.path “C:/Program Files/WinMerge/WinMergeU.exe”
この設定はそのリポジトリの設定として扱われるため、別リポジトリのグローバル設定と使い分けられます。
すべてのリポジトリでWinMergeを使う必要がない場合や、プロジェクトによって使用する差分ツールを変えたい場合に便利です。
設定範囲を決めるときは、「自分の環境全体で使う設定なのか」「このリポジトリだけの設定なのか」を基準に考えるとわかりやすいです。
WinMergeの設定を解除するには?
グローバルに登録した設定を削除する場合は、設定した項目をそれぞれunsetします。
git config –global –unset diff.tool
git config –global –unset difftool.winmerge.path
git config –global –unset difftool.prompt
すべての項目を必ず削除する必要があるわけではなく、自分が設定した内容に合わせて解除します。
リポジトリ単位で設定している場合は、そのリポジトリ内で–globalを付けずに解除します。
mergetool側も設定している場合は、merge.toolやmergetool.winmerge.pathなどを別途確認して削除してください。
設定解除後はgit configで値を確認し、意図した設定が削除されているか確かめると安心です。
変更ファイルの数だけWinMergeが起動するのは正常?
通常のgit difftoolは外部差分ツールを変更ファイルごとに呼び出すため、複数ファイルが対象ならWinMergeの比較が続くことがあります。
変更ファイルが多い場合に何度もWinMergeが表示されるからといって、すぐに設定ミスと判断する必要はありません。
1ファイルずつ確認したい場合はそのまま通常のdifftoolを使い、複数ファイルをまとめて一覧したい場合は–dir-diffを検討します。
作業内容に合わせて通常比較とフォルダー比較を切り替えると、確認しやすくなります。
PowerShellやコマンドプロンプトからも利用できる?
Gitコマンドを利用できる環境であれば、PowerShellやコマンドプロンプトからgit difftoolを実行することもできます。
WinMergeをGitのdifftoolとして正しく設定できていれば、普段利用しているターミナルからgit difftoolを実行する形で利用できます。
ただし、Git BashとWindows系シェルではパスや引用符の解釈が異なる場合があるため、WinMergeU.exeを直接実行して確認するときはシェルに合った書き方を使います。
起動しない場合は、シェルそのものを原因と決めつける前に、Gitの設定値、WinMergeU.exeの実在、比較対象の差分を順番に確認するとよいでしょう。
Git difftoolでWinMergeを使う手順まとめ
WinMergeをGitの差分ツールとして使うときは、最初にWinMergeU.exeの場所を確認し、diff.toolとdifftool.winmerge.pathを設定するのが基本です。
必要に応じてdifftool.promptも設定しておけば、WinMerge起動前の確認操作を省略できます。
設定後は登録値を確認し、実際のGitリポジトリでgit difftoolを実行してWinMergeが起動するところまで確認しておくと安心です。
未ステージの変更はgit difftool、ステージ済みの変更はgit difftool –staged、履歴同士の比較はコミットやブランチを引数に指定します。
何を比較したいのかを先に整理してからコマンドを選べば、未ステージとステージ済みの差分を取り違えにくくなります。
変更ファイルが多い場合はgit difftool –dir-diffを使うと、WinMergeのフォルダー比較で全体を確認しやすくなります。
一方で、変更ファイルが少なく1つずつ内容を確認したい場合は、通常のgit difftoolでも十分です。
WinMergeが起動しないときは、Gitの設定値、WinMergeU.exeのパス、WinMerge単体の起動、比較対象に差分があるかを順番に確認してください。
一度に複数の設定を変更するのではなく、原因を1項目ずつ切り分けることで問題を見つけやすくなります。
差分が少ない場合はgit diff、視覚的に追いたい変更が多い場合はWinMergeというように使い分けると、確認作業を無理なく効率化できます。
Gitの差分確認をすべてGUIへ置き換えるのではなく、ターミナルとWinMergeの得意な場面を使い分けることが、日常的に使いやすい運用につながります。