web-dev-qa-db-ja.com

Ubuntuサブシステム上のgit kdiff3

Git bashでkdiff3git 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)のみが表示されました。

エラーは毎回繰り返されます。誰でもこのエラーの原因を知っていますか?

1
garnekzupy

問題は、これらの操作中に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"
2
oikku