この質問は、スレッドでのVonCのコメントに基づいています。
Gitのdifftoolまたはmergetoolの自動検出はスクリプト化されていますか、それともGit実行可能ファイル内にありますか?
この質問は、スレッドでのVonCのコメントに基づいています。
Gitのdifftoolまたはmergetoolの自動検出はスクリプト化されていますか、それともGit実行可能ファイル内にありますか?
git-mergetoolでスクリプト化されています。これは私のコピーの344行目で見つかりました。
if test -z "$merge_tool"; then
merge_tool=`git config merge.tool`
if test -n "$merge_tool" && ! valid_tool "$merge_tool"; then
echo >&2 "git config option merge.tool set to unknown tool: $merge_tool"
echo >&2 "Resetting to default..."
unset merge_tool
fi
fi
if test -z "$merge_tool" ; then
if test -n "$DISPLAY"; then
merge_tool_candidates="kdiff3 tkdiff xxdiff meld gvimdiff"
if test -n "$GNOME_DESKTOP_SESSION_ID" ; then
merge_tool_candidates="meld $merge_tool_candidates"
fi
if test "$KDE_FULL_SESSION" = "true"; then
merge_tool_candidates="kdiff3 $merge_tool_candidates"
fi
fi
if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then
merge_tool_candidates="$merge_tool_candidates emerge"
fi
(snip)
git mergetoolのマニュアルページで述べたように、
--tool=<tool>
で指定されたマージ解決プログラムを使用します。
有効なマージツールは、kdiff3、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff、ecmerge、diffuse、tortoisemerge、opendiff、araxisです。
さて、そのリストはどこから来たのですか?
実際、これらのツール(およびそれらのカスタムオプション)はスクリプトで使用されます。
<Git>/libexec/git-core/git-mergetool--lib
コマンドに基づいて選択を行うスクリプトgit-mergetoolによって使用されgit config merge.tool
ます。
ただし、git-mergetool--libのvalid_tool()関数に基づく「自動選択」が少しあります。
valid_tool ()
に基づくget_merge_tool_cmd()を使用しmergetool.<aMergeToolName>.cmd
ます。
その設定がgitconfigファイルの1つに残っている場合は、そのツールが選択されます。
そうです...、JakubNarębskiはスクリプトの正しいセクションを指摘しましたgit-mergetool--lib
:
get_merge_tool () {
# Check if a merge tool has been configured
merge_tool=$(get_configured_merge_tool)
# Try to guess an appropriate merge tool if no tool has been set.
if test -z "$merge_tool"; then
merge_tool="$(guess_merge_tool)" || exit
fi
echo "$merge_tool"
}
適切に名前が付けられたその関数guess_merge_tool()
(あなたはそれを見つけることができるはずだと思います!...)は、とりわけ、opendiffを検出することを説明できる次のことを行います:
# Loop over each candidate and stop when a valid merge tool is found.
for i in $tools
do
merge_tool_path="$(translate_merge_tool_path "$i")"
if type "$merge_tool_path" > /dev/null 2>&1; then
echo "$i"
return 0
fi
done