首页 > 解决方案 > 让“git gui”打破差异中的长线?

问题描述

是否有可能使 git 发出带有长行的差异以用于git gui

对于命令行使用,可以只更改设置core.pager,但这不会影响git gui.

尽管我已经找到了一个可行的解决方案并以问答方式发布了这个问题,但我希望找到能够解决以下任何缺点的解决方案:

(a)过滤器也适用于室外git gui,可能没有必要。

(b)fold工具不缩进换行,影响可读性。我正在考虑类似 Emacs 的东西adaptive-wrap-mode

标签: gitdiff

解决方案


这可以通过使用“textconv”功能,将fold工具用作过滤器来实现。

它必须分两步进行设置。

定义驱动程序

这可以通过运行为存储库完成

git config diff.DRIVER.textconv 'fold -s'

或通过编辑.git/config包含

[diff "DRIVER"]
    textconv = fold -s

或全球通过

git config --global diff.DRIVER.textconv 'fold -s'

该工具fold可以根据需要由更智能的语言感知过滤器替换。该选项-s使折叠在空白字符处中断。

在 Windows 上, fold 实用程序可能使用 DOS 行尾,这可能与您的存储库设置冲突,从而导致^M差异中的虚假字符。这可以通过使用来解决

sh -c 'fold "$0" | dos2unix'

包装器是必需的sh,因为 textconv 协议期望指定的命令接受单个文件名作为参数,并在 STDOUT 上生成其输出。

配置 .gitattributes

设置.gitattributes要包含的文件

PATTERN diff=DRIVER

DRIVER是一个任意驱动程序名称和PATTERN一个通配符模式,它与应该应用它的文件匹配,例如*“所有文件”或*.EXT带有扩展名的文件.EXT

例子

例如,为了通过带有“dos2unix”的“fold”过滤器运行 *.tex 文件:

=== .gitattributes ===
*.tex diff=tex

=== .git/config ===
[diff "tex"]
    textconv = sh -c 'fold "$0" | dos2unix'

推荐阅读