Этот вопрос основан на комментарии 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
.
Но есть немного "автоматического выбора" на основе функции valid_tool () в git-mergetool - lib:
valid_tool ()
Он использует get_merge_tool_cmd (), который основан на mergetool.<aMergeToolName>.cmd
.
Если этот параметр останется в одном из файлов конфигурации git ... этот инструмент будет выбран.
Правильно ... Якуб Наребски только что указал на правый раздел в скрипте 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