Git:KDiff3をマージツールおよび差分ツールとして構成する方法


218

最近、GitExtension 2.46を使用していましたが、同じGitのバージョンは1.9.4.msysgit.2です。唯一のGitのコマンドを使用して喜んで、私はGitExtensionをアンインストールし、利用可能な最新バージョンのインストールのGitKDiff3のを

マージして競合が発生した場合、次のコマンドを実行します。

$ git mergetool

それから私はメッセージを受け取ります:

マージツールkdiff3は「kdiff3」としては使用できません。

KDiff3パスによるものと思われます。

環境

  • OS:Windows 10
  • Git 2.6.1.windows.1
  • KDiff3 0.9.98(64ビット)

質問:

  • 私は何をコマンドの.gitconfigファイルに設定する必要がない$ git mergetoolバージョンでKDiff3のGUIを開くには、LOCALREMOTEBASEMERGED衝突ファイルの?

  • diff-toolを使用するように構成するにはどうすればよいですか?


関連する投稿-Gitで一般的にdiffツール設定する方法。
RBT

回答:


373

これらのサイトは、ほとんど、mergetooldifftoolで非常に役に立ちました。グローバル構成を使用しましたが、リポジトリで問題なく使用できます。次のコマンドを実行するだけです。

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false

git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false

このtrustExitCodeオプションの使用は、diffツールが戻ったときに何をしたいかによって異なります。ドキュメントから:

git-difftoolは、各ファイルで個別にdiffツールを呼び出します。デフォルトでは、diffツールによって報告されたエラーは無視されます。--trust-exit-codeを使用して、呼び出されたdiffツールがゼロ以外の終了コードを返したときにgit-difftoolを終了します。


5
それでも、kdiff3が失敗した場合にgit-difftoolが終了しないようにしたいのはなぜですか?
David Torres

9
私は、Visual Studio 2015で認識差分ツールを持っているために、私はこの行を変更しなければならなかった git config --global --add diff.guitool kdiff3 。これに git config --global --add diff.tool kdiff3
ギヨーム・レイモンド

2
@DavidTorresおそらく、(正常に動作するとゼロ以外のコードで終了する)正しく動作しないWindowsツールがすべての人のために台無しにします。
Matthew Flaschen 2017年

2
参照されたドキュメントによると、デフォルトではとにかく無視するため、trustExitCodeをfalseに設定する必要はありません。
マットウィルキー

7
AFAIKは、--add複数回呼び出されると、2番目または3番目のエントリを追加します。で簡単に削除できないため、後で修正するのは困難--removeです。せずに値を設定するだけでも問題あり--addません。
トーマスウェラー

58

@ジョセフの答えを拡張するだけです:

これらのコマンドを適用した後、グローバル.gitconfigファイルには次の行が含まれます(プロセスを高速化するには、ファイルにコピーするだけです)

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false

@ Alex78191、私の答えはジョセフの答えを反映しており、この設定に関する詳細を見つけることができます。
Igor Kustov

5
これを正しくするのに長い時間がかかりました。(1).gitconfig編集中のファイル、使用中のファイルではありませんでした。ロードされているものを特定するには、stackoverflow.com / questions / 2114111 /…を参照してください。(2)が混在し、一致しないcmd =path =gitconfigで、TL; DR:削除CMDとだけ使用パス
マットウィルキー

1
ここでgit bashを使用します... git difftool <filename>または単純なgit difftoolを実行して、設定したばかりのgui kdiff3を実行します。
Vivek 2018年

32

Macユーザー向け

これが@Josephの受け入れられた回答ですが、デフォルトのMacインストールパスの場所は kdiff3

(これをコピーして貼り付け、一度に実行できることに注意してください)

git config --global --add merge.tool kdiff3 
git config --global --add mergetool.kdiff3.path  "/Applications/kdiff3.app/Contents/MacOS/kdiff3" 
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add difftool.kdiff3.trustExitCode false

4
--addコマンドを2回実行すると、2つの構成エントリになる可能性があるため、使用しないでください。単一のエントリを削除することができなくなったため、これは混乱を招きます。git-scm.com/docs/git-configを参照してください:「オプションに複数の行を追加できます」
Thomas Weller

11

問題は、Gitが%PATH%でKDiff3を見つけられないことです。

典型的なUNIXインストール内のすべての実行可能ファイルは、いくつかの周知の場所(に存在する/bin//usr/bin//usr/local/bin/、等)、および1つは、単にシェル・プロセッサに名前を入力してプログラムを起動することができ(例えばcmd.exe :))。

Microsoft Windowsでは、プログラムは通常、専用のパスにインストールされるためkdiff3、単にcmdセッションに KDiff3を実行。

難しい解決策:GitにKDiff3の場所を指定するには、への完全パスを指定する必要がありますkdiff3.exe。残念ながら、Gitはそのconfigのパス指定にスペースが好きではないので、最後にこれが必要になったとき、私はそれが遅れているかのように、それらの古い「C:\ Progra〜1 ... \ kdiff3.exe」で終わってしまいました1990年代:)

簡単な解決策:コンピューターの設定を編集し、%PATH%にkdiff3.exeを含むディレクトリを含めます。次に、名前でcmd.exeから起動できるかどうかをテストし、Gitを実行します。


8

コマンドラインパラメーターを追加する必要がありました。そうしないと、KDiff3はファイルなしでのみ開き、ベース、ローカル、リモートの入力を要求します。TortoiseHgで提供されているバージョンを使用しました。

さらに、古き良きDOS 8.3ファイル名に頼る必要がありました。

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED

ただし、現在は正常に動作しています。


6

改正するクリス答えを Gitの2.20(Q4 2018)、のための適切なコマンドで始まる、git mergetoolとなります

git config --global merge.guitool kdiff3 

これは、「git mergetool」が「--[no-]gui」と同じように「」オプションをとることを学習したためですgit difftoolです。

Denton Liu()によるcommit c217b93commit 57ba181commit 063f2bd(2018年10月24日)を参照してください。(合併によりJunio C浜野- -87c15d1コミットし、2018年10月30日)をDenton-L
gitster

mergetool-g/--[no-]gui引数として受け入れる

オプションのdifftool受け入れ方法に沿って、同じオプション-g/--[no-]guimergetool受け入れて、merge.guitool変数を使用しての代わりにデフォルトのmergetoolを検索しますmerge.tool


5

(WSL gitからkdiff3を使用する方法を見つけようとしたとき、私はここで終わり、最後のピースを得たので、その答えを見つけようとしているときに、ここで偶然他の人にも私の解決策を投稿します)

WSL gitのdiff / mergeツールとしてkdiff3を使用する方法

Windows Update 1903を使用すると、はるかに簡単です。wslpathを使用するだけで、Windows側が\ wsl $を介してWSLファイルシステムにアクセスできるようになるため、WindowsからWSLにTMPを共有する必要はありません。

[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    # Unix style paths must be converted to windows path style
    cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false

Windows Update 1903より前

Windows 10にインストールされているkdiff3をWSLのgitのdiff / mergeツールとして使用する手順:

  1. kdiff3インストールディレクトリをWindowsパスに追加します。
  2. TSLをWSLENV Windows環境変数に追加します(WSLENV = TMP / up)。TMP dirは、以前のリビジョンのファイルのように、gitが一時ファイルに使用するため、これが機能するには、パスがWindowsファイルシステム上にある必要があります。
  3. .bashrcでTMPDIRをTMPに設定します。
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
  1. kdiff3を呼び出すときに、unix-pathをwindows-pathに変換します。私の.gitconfigのサンプル:
[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    #path = kdiff3.exe
    # Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
    cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.