É auto-detecção do Git script ou é dentro de algum executável Git?
Pergunta
Esta questão é baseado no comentário do VonC no fio .
auto-detecção de Is Git para difftool ou mergetool script ou é dentro de algum executável Git?
Solução
É baseado num guião git-mergetool. Achei isso na linha 344 da minha cópia.
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)
Outras dicas
Como mencionado na href="http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html" rel="nofollow noreferrer"> git página homem ,
--tool=<tool>
Use o programa de resolução de merge especificado por.
ferramentas de mesclagem válidos são: kdiff3, tkdiff, fusão, xxdiff, emerja, vimdiff, gvimdiff, ECMerge, difusa, TortoiseMerge, opendiff e Araxis.
Agora, onde é que essa lista vem?
Na verdade, essas ferramentas (e suas opções personalizadas) são usados ??no script:
<Git>/libexec/git-core/git-mergetool--lib
e usado pelo script git-mergetool, que faz a seleção com base no comando git config merge.tool
.
Mas há um pouco de 'auto-selecção' baseada na função valid_tool () no git-mergetool - lib:
valid_tool ()
Ele usa get_merge_tool_cmd () que se baseia em mergetool.<aMergeToolName>.cmd
.
Se essa configuração permanecerá em um dos arquivos git config ... essa ferramenta será selecionada.
Right ..., Jakub Narebski apenas apontou a secção direita em o script 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"
}
Essa função apropriadamente chamado guess_merge_tool()
(você acha que eu deveria ser capaz de encontrá-lo ...!) Faz entre outras coisa, o seguinte, o que poderia explicar detecta 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