设置为 diff-highlight 的 Git 寻呼机在 Windows 10 中不起作用

Posted

技术标签:

【中文标题】设置为 diff-highlight 的 Git 寻呼机在 Windows 10 中不起作用【英文标题】:Git pager set to diff-highlight does not work in 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 【参考方案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

【讨论】:

以上是关于设置为 diff-highlight 的 Git 寻呼机在 Windows 10 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为Git over SSH设置新的远程存储库

在 git show / git diff 中将 tabwidth 设置为 4

git 为项目设置用户名/邮箱/密码

使用GIT为指定项目单独设置用户名和密码

将 Visual Studio Code 设置为 OSX 上的全局 Git 编辑器

设置Beyond Compare 为 Git 默认的比较工具