最近私はGitExtension 2.46を使用していましたが、同じGitバージョンは1.9.4.msysgit.2です。 Gitコマンドだけを使いたいので、GitExtensionをアンインストールし、 Git と KDiff3 の最新版をインストールしました。
マージして競合が発生したら、次のコマンドを実行します。
$ git mergetool
それから私はメッセージを受け取ります:
マージツールkdiff3は 'kdiff3'としては使用できません。
私はそれがKDiff3パスによるものでなければならないと思います。
環境
質問:
バージョン _ local _ 、 _ remote _ 、 _ base _ 、および _を使用してKDiff3 GUIを開くには、コマンド$ git mergetool
に対して.gitconfigファイルで何を構成する必要がありますか。 _ 競合したファイルのマージ?
どのように使用するように設定するのですか?
これらのサイトはとても役に立ちました、 mergetool と difftool 。グローバル設定を使用しましたが、リポジトリで問題なく使用できます。以下のコマンドを実行するだけです。
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 を使用します。
@ 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
これが@ 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
問題は、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を実行します。
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
が同じオプションを受け入れるようにします。
私はコマンドラインパラメータを追加する必要がありました、さもなければKDiff3はファイルなしでのみ開くでしょう、そしてベース、ローカルとリモートのために私にプロンプトを出します。 TortoiseHg で提供されているバージョンを使用しました。
さらに、私は古き良きDOS 8.3ファイル名に頼る必要がありました。
[merge]
tool = kdiff3
[mergetool "kdiff3"]
cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED
しかし、現在は正しく機能しています。
(WSL gitからkdiff3を使用する方法を見つけようとすると、ここで終わり、最終的な部分が手に入りました。その答えを見つけようとしている間に、他の人にも解決策を投稿します)
Windows 10にインストールされたkdiff3をWSLのgit用の差分/マージツールとして使用するための手順:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
[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