web-dev-qa-db-ja.com

git mergetoolとしてemergeの代わりにkdiff3を設定する方法は?

Mac OSX Snow LeopardでGitを使用しており、mergeおよびdiffツールを編集して、emergeではなくkdiff3を使用しようとしました。

しかし、使用しようとするとkdiffのGUIが起動せず、cmdベースのインターフェイスが表示されます。

Gitconfigでの私の設定は次のとおりです。

[merge]
     tool = kdiff3
[mergetool "kdiff3"]
    cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
    args = $base $local $other -o $output
    trustExitCode = false
[diff]
tool = kdiff3
[difftool "kdiff3"]
cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
args = $base $local $other -o $output
trustExitCode = false

明らかに何か足りないものがありますが、私は何を間違えましたか?

52
AKFourSeven

最近のGitバージョンにはkdiff3の組み込みサポートがあるため、汎用のcmdおよびargs設定を使用して手動で構成する必要はありません。代わりに:

$ git config --global merge.tool kdiff3

また、kdiff3[〜#〜] path [〜#〜]環境にない場合も同様です。

$ git config --global mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3

これにより、git mergetoolkdiff3になります。 方法はありません Gitをautomaticallyに設定するには、競合する手動マージの後にマージツールを起動します。

Gitがどのようにkdiff3を内部的に呼び出しているかを本当に見たい場合は、 kdiff3の組み込みmergetool設定 を見てください。

Edit:Mac OS Xもサポートするようになった Beyond Compare 4 の場合、kdiff3bc3(はい、「3」)と上記の行のパスを調整します。 Git 2.2.0以降では、bc3のエイリアスとしてbcを使用できるようになるため、バージョン番号を気にする必要はありません。

135
sschuberth

最近のGitバージョンには、kdiff3のサポートが組み込まれています

はい。ただし、Git 2.12(2017年第1四半期)でのみ、これらの組み込みツールが終了コードを信頼できます。

commit 2967284commit 7c10605 (2016年11月29日) David Aguilar(davvid を参照してください。
浜野潤夫-gitster- in commit c4a44e2 、2016年12月16日)

mergetool:組み込みツールの_mergetool.$tool.trustExitCode_を尊重

組み込みのマージツールには、ツールの終了コードを信頼してマージの成功または失敗を判断できるかどうかについてのハードコーディングされた仮定が含まれています。
終了コードが信頼されていないツールには、check_unchanged()関数にmerge_cmd()への呼び出しが含まれています。

これに伴う問題は、trustExitCode構成が組み込みツールに適用されないことです。

trustExitCode構成を尊重する組み込みツールを教えます。

_kdiff3_ を参照)

run_merge_cmd()を拡張して、ツールの終了コードが信頼できない場合にcheck_unchanged()を呼び出すようにします。
スクリプトレットはcheck_unchanged()呼び出しを削除するようになりました。呼び出しの責任がなくなったためです。

1
VonC