Windows Tips

WSL で git difftool に WinMerge を使ったらエラーになりました

投稿日:

git difftool + WinMerge on WSL

以前から、WSL 上で git difftool コマンドを使う際に WinMerge を使っていたのですが(ごくたまにですが)、最近エラーが発生することに気が付きました。

xdocdiff WinMerge Pluginが表示したエラー
WinMerge でこのエラーメッセージ が表示されたときに、WSL 上で /tmp/git-difftool.lh0B3L/right ディレクトリ内を表示すると、bar.txt がシンボリックリンクになっていることが分かります。

結論

結論としては、git difftool コマンドに --dir-diff オプションを指定していたのに、--no-symlinks オプションは指定していなかったことが原因でした。

原因と対策

--dir-diffオプションを指定して git difftool コマンドを実行すると、外部アプリケーション(今回の場合は WinMerge)に読み込ませるためのファイルがUbuntu側の一時ディレクトリにコピーされます。但し特定の条件(今回はこれに当てはまりました)では「ファイルのコピー」ではなく Linux のシンボリックリンクが生成されるため、Windows のアプリケーションである WinMerge では読み込めないというのが原因でした。
シンボリックリンクではなく、元のファイルのコピーを行わせるには、--no-symlinks オプションを指定します。詳しくは、Git – git-difftool Documentation を参照して下さい。

なぜ最近になってエラーになったのかは分かっていません。前から --dir-diff オプションは指定していたはずなんですが。

少し調べてみると、この問題点について指定している2018年の記事を見つけました。ということは、やはり私の勘違いかもしれません。念のため、ここに記録しておきます。

おまけ

ちなみに、~/.gitconfig ファイルには以下を記述しています(関連する行のみを抜粋)。

[diff]
    tool = winmerge
[difftool]
    prompt = false
[difftool "winmerge"]
    path = \"/mnt/c/Program Files (x86)/WinMerge/WinMergeU.exe\"
    cmd = \"/mnt/c/Program Files (x86)/WinMerge/WinMergeU.exe\" -e -r -u $(wslpath -w $LOCAL) $(wslpath -w $REMOTE)
    trustExitCode = false
[alias]
    dt = difftool --dir-diff --no-symlinks
    dtc = difftool --dir-diff --cached --no-symlinks

参考

📂-Windows Tips

執筆者:labo


comment

メールアドレスが公開されることはありません。

関連記事

Windows

Windows 10 で「ネットワークの場所(プロファイル)」を「パブリック」から「プライベート」に変更する方法

Windows 10 で「ネットワークの場所」を「パブリック」から「プライベート」に変更する方法について説明します。

Windows

Windows で「スタートアップフォルダ」を開く方法

Windows で「スタートアップフォルダ」を開く方法です。 (1) Windows + R キーを押して、「ファイル名を指定して実行」ウィンドウを開く。 (2) “shell:start …

Windows

【Windows】まとめて複数のURLを開く方法

目次1. はじめに2. 手順3. おわりに 1. はじめに Windows 環境で、複数のURLをまとめてブラウザで開く方法を紹介します。 バッチファイルを使う方法なのですが、ブラウザに依存しない と …

Windows

エクスプローラーで目的のフォルダに素早く移動する方法(アドレスバーの活用)

Windows の(ファイル)エクスプローラーで、アドレスバーを活用して目的のフォルダに素早く移動する手順について説明します。

Windows

【Windows 10】Twitter アプリをアンインストールする

Windows 10 上の Twitter アプリをアンインストールする手順を紹介します。 目次1. はじめに(Twitter URL とアプリの紐づけ設定における問題)2. Twitterアプリをア …