【问题标题】:Git pager set to diff-highlight does not work in Windows 10设置为 diff-highlight 的 Git 寻呼机在 Windows 10 中不起作用
【发布时间】:2017-07-30 06:58:12
【问题描述】:

我已将 Git 的寻呼机选项设置为此

[pager]
    log = diff-highlight 

我从Git's repository 3dbfe2b8 下载了diff-highlight 脚本并将其放在我的~/bin 文件夹中。

$ where git
C:\Program Files\Git\cmd\git.exe
$ where diff-highlight
C:\Users\andy\bin\diff-highlight

运行git log 会导致以下错误:

$ git log
Can't open diff-highlight: No such file or directory at C:\Users\andy\bin\diff-highlight line 36.
Segmentation fault

另一方面,以下命令运行良好,

$ git log -p --color | diff-highlight | less -FRSX

这意味着diff-highlight 可以从$PATH 获得,但Git 的配置找不到它。

我的 Git 版本是2.12.0.windows.1

【问题讨论】:

  • 我今天通过将/usr/share/doc/git/contrib/diff-highlight/diff-highlight 从 Linux 端复制到 PATH 中的 Windows 目录进行了尝试,它工作正常。我的 git 版本:2.33.1.windows.1

标签: windows git pager


【解决方案1】:

Recent guidance 建议将整个diff-highlight | less -FRSX 字符串放入pager.XXX 配置中。

这对我来说非常适合当前diff-highlight 脚本的Maked 版本,尽管我只将它用于pager.diffinteractive.diffFilter

【讨论】:

  • 未来访问者:我现在使用delta 作为我的寻呼机。
【解决方案2】:

Segmentation fault 部分至少应该消失:当一个不存在的程序被指定为寻呼机时,我们试图重用一个未初始化的 child_process 结构并崩溃,这已在 Git 2.35(2022 年第一季度)中修复)。

参见Enzo Matsumiya (ematsumiya)commit f917f57(2021 年 11 月 24 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit bb47eee,2021 年 12 月 10 日)

pager: 修复寻呼程序不存在时的崩溃问题

签字人:Enzo Matsumiya

prepare_cmd() 失败时,例如,寻呼进程设置,child_process_clear() 释放pager_process.args 中的内存,但.argv 在start_command() 之前被指向pager_process.args.v,所以它是现在是一个悬空指针。

setup_pager() 然后第二次调用,在这种情况下从cmd_log_init_finish() 调用,以及使用其 .argv 的任何进一步操作,例如strvec_*, 将使用悬空指针并最终崩溃。
根据琐碎的测试,如果第一次调用成功,setup_pager() 不会被调用两次。

此补丁确保pager_processsetup_pager() 上正确初始化。
从它的声明中删除CHILD_PROCESS_INIT,因为它不再是真正需要的。

添加测试以捕获可能的回归。

复制者:

$ git config pager.show INVALID_PAGER
$ git show $VALID_COMMIT
error: cannot run INVALID_PAGER: No such file or directory
[1]    3619 segmentation fault (core dumped)  git show $VALID_COMMIT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2011-01-12
    • 2012-09-03
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多