"git config interactive.diffFilter diff-highlight":按行显示相同差异 - 无颜色

6
在执行了git config --global interactive.diffFilter diff-highlight命令后,我的.gitconfig文件变成了这样:
# This is Git's per-user configuration file.
[user]
    name = Vitaly Zdanevich
    email = vitaly.zdanevich@xxx.com
[core]
    excludesfile = /Users/vitaly/.gitignore_global
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge --skip -- %f
    process = git-lfs filter-process --skip
    required = true
[diff]
    tool = vimdiff
    context = 20
[difftool]
    prompt = false
[interactive]
    diffFilter = diff-highlight

git commit -pgit add -p中,我看到了同样的逐行无色差异,默认情况下使用terminal.app:

git config interactive.diffFilter diff-highlight git diff without color

我还尝试过:

git -c interactive.diffFilter="git diff --color-words" add -p

结果如下:

fatal: mismatched output from interactive.diffFilter
hint: Your filter must maintain a one-to-one correspondence
hint: between its input and output lines.

我使用的是官方命令行工具自带的git版本,版本号为2.17.2 (Apple Git-113),操作系统为macOS 10.14.1,而非使用Brew安装的版本。我更喜欢简单易用的方式。


他们在git中进行了更改,这也破坏了交互式“add”中的diff-so-fancy:https://github.com/so-fancy/diff-so-fancy/issues/296。 - WloHu
这里提供了一个解决方法:https://github.com/so-fancy/diff-so-fancy/issues/35#issuecomment-578188120 - Torsten Bronger
2个回答

2

看起来已经使用新的git版本(2.26.2)进行了修复。

git diff-highlight


1
尽管 Git 2.26 有所帮助,但我仍然建议使用更近期的 Git 版本。
那些使用 diff-so-fancy 作为 diff-filter 的人注意到了内置版本的“add -p”中解析差异输出的代码中出现了一些退化,这已经在 Git 2.38(2022 年第三季度)中得到了修正。
查看 commit 0a10167, commit fd3f7f6, commit b6633a0(2022年9月1日)由 Johannes Schindelin (dscho) 提交。
(由 Junio C Hamano -- gitster -- 合并于 commit fb094cb,2022年9月9日) add -p:在带颜色的差异中优雅地处理无法解析的块标头 报告者:Philippe Blain
协助者:Phillip Wood
签署者:Johannes Schindelin这个帖子中,菲利普·布莱恩报告说,当使用diff-so-fancy来着色差异时,内置的git add -p(man)命令会失败。
原因是该工具生成的彩色差异包含一个hunk header,其中不包含任何可解析的@@ ... @@行范围信息,因此我们无法检测到该头部中在行范围之后的任何部分。
正如菲利普·伍德提出的那样,让我们把它作为一个清晰的指示,应该逐字显示hunk headers。
这也是交互式add命令的Perl版本所做的。

并且:

add -p:忽略未提交的子模块

签名作者:Johannes Schindelin

由于在生成任何真正的差异之前总是使用--numstat选项(后者使用--ignore-submodules=dirty)运行diff-indexdiff-files,因此Perl版本的git add -pman简单地忽略了脏子模块,并且甚至不会将它们提供给暂存区。
然而,内置变体没有使用该标志,因为它尝试仅运行一个diff命令,跳过Perl变体的不必要的diff-index/diff-files调用,因此仅在生成并解析实际差异后才忠实地重述Perl代码所做的事情。
当使用diff-so-fancy运行内置的add -p时,这会导致问题,因为该差异着色器始终在差异头之前插入一个空行,以确保它按照git add -p预期产生4行(非着色的diffindex---+++行的等效行)。但是git diff-filesman不会为脏子模块产生任何index行。
根本问题甚至不是行的差异,而是git add -p呈现脏子模块的差异:对于那些东西,没有任何可以暂存的内容。
让我们修复这个错误,并教内置的add -p也忽略脏子模块。这也顺便解决了diff-so-fancy问题;-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接