设置为 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
脚本的Make
d 版本,尽管我只将它用于pager.diff
和interactive.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_process
在setup_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 show / git diff 中将 tabwidth 设置为 4