【问题标题】:Make "git gui" break long lines in diffs?让“git gui”打破差异中的长线?
【发布时间】:2019-02-28 19:25:42
【问题描述】:

是否可以让 git 发出带有长行的差异,以便在 git gui 中使用?

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

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

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

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

【问题讨论】:

    标签: git diff


    【解决方案1】:

    这可以通过使用“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 上,折叠实用程序可能使用 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'
    

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2011-02-23
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多