Почему git использует разные инструменты сравнения в разных репозиториях?

Я пытаюсь настроить opendiff в качестве моего графического git difftool. Другими словами, я хочу, чтобы opendiff открыл графическое окно и показал изменения в моем файле при вводе git difftool в командной строке. Я добавил следующую конфигурацию в мой ~/.gitconfig:

[diff]
    tool = opendiff
[difftool]
    prompt = false
[difftool "opendiff"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"

Когда я бегу git difftool в большинстве репозиториев он открывает opendiff по своему желанию, но в одном конкретном репо он всегда просто показывает мне текстовый diff в терминале.

Я бегал git config --list в обоих репозиториях единственные различия - это те, которые вы ожидаете - имена источников и веток и т. д. - все настройки diff идентичны.

Итак, что еще может заставить git работать по-разному в этих двух репозиториях?

РЕДАКТИРОВАТЬ:

Содержание плохого поведения репо .git/configСлегка отредактировано:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = git@<ORIGIN_URL>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "develop"]
    remote = origin
    merge = refs/heads/develop
[branch "feature/FEATURE1"]
    remote = origin
    merge = refs/heads/FEATURE1
[branch "feature/FEATURE2"]
    remote = origin
    merge = refs/heads/FEATURE2

EDIT2:

Это разница между git config --list в обоих репозиториях слегка отредактировано:

40c40
< remote.origin.url=git@<GOOD_REPO_URL>
---
> remote.origin.url=git@<BAD_REPO_URL>
42,43c42,47
< branch.master.remote=origin
< branch.master.merge=refs/heads/master
---
> branch.develop.remote=origin
> branch.develop.merge=refs/heads/develop
> branch.feature/FEATURE1.remote=origin
> branch.feature/FEATURE1.merge=refs/heads/feature/FEATURE1
> branch.feature/FEATURE2.remote=origin
> branch.feature/FEATURE2.merge=refs/heads/feature/FEATURE2

EDIT3:

Ну, это смущает... Я больше не могу воспроизвести проблему! Теперь он работает в обоих репозиториях, как я и ожидал. Клянусь, я ничего не изменил, ребята... Просто бегу из дома вместо работы. Гремлины?

1 ответ

Это различие, которое вы видите, может быть результатом различных настроек в локальных и глобальных конфигурациях.

Попробуйте сравнить результаты следующих действий:

git config --global -l

а также

git config --local -l

Затем, чтобы изменить поведение определенного репо, который вы описали как вызов другого инструмента, я бы попытался войти в этот репо и сбросить конфигурацию с помощью --unsetвдоль линий

git config --local --unset difftool

или, может быть

git config --local --unset diff.tool

Другие вопросы по тегам