首页 > 解决方案 > 为什么 git 在不同的存储库中使用不同的差异工具?

问题描述

我正在尝试将 opendiff 设置为我的图形化 git difftool。换句话说,我希望 opendiff 打开一个图形窗口并在我git difftool在命令行上键入时显示我的文件更改。我已将以下配置添加到我的~/.gitconfig

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

当我git difftool在大多数存储库中运行时,它会根据需要打开 opendiff,但在一个特定的存储库中,它总是只在终端中显示一个文本差异。

git config --list在两个存储库中都运行过,唯一的区别是您所期望的 - 源名称和分支名称,等等 - 所有差异设置都是相同的。

那么 - 还有什么可能导致 git 在这两个存储库中以不同的方式工作?

编辑:

行为不端的 repo 的内容.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

编辑2:

这是两个回购之间的差异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

编辑3:

好吧,这很尴尬......我不能再重现这个问题了!现在它正如我预期的那样在两个存储库中工作。我发誓我没有改变任何东西,伙计们......只是从家里跑而不是工作。小精灵?

标签: gitopendiff

解决方案


您看到的这种差异可能是本地和全局配置中不同设置的结果。

尝试比较以下输出:

git config --global -l

git config --local -l

然后,要更改您描述为调用不同工具的特定存储库的行为,我会尝试进入该存储库并使用 重置配置--unset,沿着

git config --local --unset difftool

或者可能

git config --local --unset diff.tool


推荐阅读