Это сценарий автоопределения Git или он находится в каком-то исполняемом файле Git?

Этот вопрос основан на комментарии VonC в ветке .

Автоопределение Git для difftool или mergetool выполняется за счет сценария или в каком-либо исполняемом файле Git?


person Léo Léopold Hertz 준영    schedule 30.06.2009    source источник
comment
Якуб Наребски, просто найдите нужный раздел в скрипте Git: см. Мой полный ответ.   -  person VonC    schedule 30.06.2009


Ответы (2)


Это написано в 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)
person kwatford    schedule 30.06.2009
comment
Мне нужно скачать новый Git и посмотреть его исходный код. Мой git находится в скомпилированном формате, поэтому его невозможно прочитать. @ Как вы можете увидеть исходный код Git, не загружая новый? - person Léo Léopold Hertz 준영; 04.07.2009
comment
@Masi: Хотя сам git компилируется, многие команды (например, mergetool) на самом деле представляют собой просто спрятанные где-то скрипты. В моей системе они в основном хранятся в / usr / lib / git-core / - person kwatford; 04.07.2009

Как указано на странице руководства 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
person VonC    schedule 30.06.2009
comment
На самом деле это функция 'guess_merge_tool' в 'git-mergetool - lib' - person Jakub Narębski; 30.06.2009