Git bashでkdiff3
をgit difftool
として使用していますが、Ubuntuサブシステムで使用するには問題が発生しました。 UbuntuサブシステムにはすでにGitがインストールされています。そこで、Git BashからGitのグローバル構成をコピーしました(それに応じてパスを変更します)。
[user]
email = ...
name = ...
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = "/mnt/c/Program Files/KDiff3/kdiff3.exe"
[diff]
tool = kdiff3
guitool = kdiff3
[difftool "kdiff3"]
path = "/mnt/c/Program Files/KDiff3/kdiff3.exe"
[core]
autocrlf = true
その後、エラーが発生しました:
Opening of these files failed
- [filename].[extension] (A)
プログラムウィンドウは正しく開きましたが、右側のファイル(B)のみが表示されました。
エラーは毎回繰り返されます。誰でもこのエラーの原因を知っていますか?
問題は、これらの操作中にgitがtmpファイルを使用し、tmpファイルへのパスが絶対パスになる可能性があることです。 diff cmdをechoに変更すると、パスが何であるかを確認できます。
[difftool "kdiff3"]
path = "/mnt/c/Program Files/KDiff3/kdiff3.exe"
cmd = "echo $LOCAL $REMOTE"
出力は次のようになります
/tmp/BPI1A2_Layout.js Layout.js
WindowsからのKDiff3は相対パスであるため、Layout.jsにアクセスできます。パス/tmp/BPI1A2_Layout.jsはWindows上に存在しないため、KDiff3はファイルを見つけることができません。
Gitコマンドにデフォルト以外のTMPDIRを使用できます。
TMPDIR=".tmp" git difftool
今、パスは
.tmp/BPI1A2_Layout.js Layout.js
どちらも、Windowsがアクセスできる同じディレクトリ構造の下で相対的であり、kdiffは期待どおりに機能します。
プロジェクトフォルダー内で.tmpディレクトリを使用しても問題ない場合、簡単な回避策はエイリアスを作成することです
alias git="TMPDIR=.tmp git"