web-dev-qa-db-ja.com

Git:KDiff3をマージツールと差分ツールとして設定する方法

最近私は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ビット)

質問:

  • バージョン _ local _ _ remote _ _ base _ 、および _を使用してKDiff3 GUIを開くには、コマンド$ git mergetoolに対して.gitconfigファイルで何を構成する必要がありますか。 _ 競合したファイルのマージ?

  • どのように使用するように設定するのですか?

180
Joseph

これらのサイトはとても役に立ちました、 mergetooldifftool 。グローバル設定を使用しましたが、リポジトリで問題なく使用できます。以下のコマンドを実行するだけです。

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

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

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

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

311
Joseph

@ Joseph's answer を拡張するためだけに_:

これらのコマンドを適用した後、あなたのグローバル.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
43
Igor Kustov

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
18
kris

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

典型的なUnixインストールでは、すべての実行ファイルはいくつかのよく知られた場所(/bin//usr/bin//usr/local/bin/など)にあり、シェルプロセッサでその名前を単にタイプすることによってプログラムを呼び出すことができます(例:cmd.exe :)。

Microsoft Windowsでは、プログラムは通常専用パスにインストールされるため、cmdセッションでkdiff3を入力してKDiff3を実行することはできません。

難しい解決策:kdiff3.exeのフルパスを指定して、GDにKDiff3の場所を指定する必要があります。残念なことに、Gitはその設定の中のパス指定にスペースが好きではないので、最後にこれを必要としたときには、あたかも遅くなったかのように、古代の "C:\ Progra〜1 ...\kdiff3.exe"を使いました1990年代:)

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

10
user3159253

kris ' answer を修正するには、Git 2.20(Q4 2018)以降、git mergetoolに対する適切なコマンドは次のようになります。

__コードスニペット__

これは、「git config --global merge.guitool kdiff3 」が「git mergetool」と同じように、「--[no-]gui」オプションを使用することを学んだためです。

コミットc217b93コミット57ba181コミット063f2bd (24 Oct 2018)による Denton Liu(git difftool を参照。
Junio C Hamano - gitster - in commit 87c15d1 、2018年10月30日にマージ)

mergetool:引数としてDenton-Lを受け入れる

difftool-g/--[no-]guiオプションをどのように受け入れるかに沿って、-g/--[no-]gui変数の代わりにmerge.guitool変数を使ってmerge.toolを見つけるようにmergetoolが同じオプションを受け入れるようにします。

5
VonC

私はコマンドラインパラメータを追加する必要がありました、さもなければKDiff3はファイルなしでのみ開くでしょう、そしてベース、ローカルとリモートのために私にプロンプ​​トを出します。 TortoiseHg で提供されているバージョンを使用しました。

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

[merge]
    tool = kdiff3

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

しかし、現在は正しく機能しています。

4
martin

(WSL gitからkdiff3を使用する方法を見つけようとすると、ここで終わり、最終的な部分が手に入りました。その答えを見つけようとしている間に、他の人にも解決策を投稿します)

Kdiff3をWSL gitの差分/マージツールとして使用する方法

Windows 10にインストールされたkdiff3をWSLのgit用の差分/マージツールとして使用するための手順:

  1. Kdiff3インストールディレクトリをWindowsのパスに追加します。
  2. TMPをWSLENV Windows環境変数に追加します(WSLENV = TMP/up)。 TMPディレクトリは、以前のリビジョンのファイルと同様に、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
1
cola