使“ git gui”在比较中打破长行?

时间:2019-02-27 17:37:21

标签: git diff

是否可以使git发出diff并用长行包装以供git gui使用?

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

尽管我找到了可行的解决方案并以问与答的方式发布了此问题,但我希望找到解决以下缺点的解决方案:

(a)过滤器也应用在git gui之外,这可能是不必要的。

(b) fold工具不会缩进换行,这会增加可读性。我正在考虑类似Emacs的adaptive-wrap-mode

1 个答案:

答案 0 :(得分:0)

这可以通过使用“文本转换”功能并使用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行尾,这可能会与存储库的设置冲突,从而导致diff中出现虚假的^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'