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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top