如何防止'git diff'使用寻呼机?

大兔子大兔子 提交于 2020-01-06 23:06:14

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

是否有命令行开关可以传递给git diff和默认情况下使用less分页器的其他命令?

我知道我可以将其通过管道传递给cat,但是这样可以删除所有语法突出显示。

我知道我可以通过GITPAGER=cat (或类似的东西)将全局.gitconfig中的寻呼机设置为cat。 但我有时想传呼(取决于diff的大小)。

但是,如果有的话,我希望使用命令行开关。 我找不到手册页中的内容。


#1楼

正如前面提到的答案,如果内容少于一个屏幕,将-F选项传递给less导致其退出。 但是,这样做之后,屏幕被重置,最终您看不到内容。

-X选项消除了该行为。 因此,我使用以下内容基于内容量启用条件分页:

git config --global --replace-all core.pager "less -F -X"

#2楼

文档中的最新更改提到了以less方式删除默认选项的另一种方式(“默认选项”为FRSX )。

对于这个问题,这将是(git 1.8+)

git config --global --replace-all core.pager 'less -+F -+X'

例如, Dirk Bester 在评论中建议:

export LESS="$LESS -FRXK" 

所以,我得到使用Ctrl-C彩色DIFF从戒烟less

威尔逊F 在评论他的问题中提到:

less支持水平滚动,因此当切掉线条时,less禁用“一屏退出”功能,以便用户仍然可以向左滚动文本以查看被切掉的内容。


这些修改在git 1.8.x中已经可见,如“ 始终对git diff使用传呼器 ”中所示(请参见注释)。 但是文档只是改写了( 对于git 1.8.5或1 .9 ,2013年第四季度 )。

Git命令使用的文本查看器(例如,“ less”)。
该值应由外壳解释。

优先顺序为:

  • $GIT_PAGER环境变量,
  • 然后是core.pager配置,
  • 然后$PAGER
  • 然后在编译时选择默认值(通常为“较小”)。

当未设置LESS环境变量时,Git会将其设置为FRSX
(如果设置了LESS环境变量,Git根本不会更改它)。

如果core.pager选择地覆盖core.pager LESS默认设置,则可以将core.pager设置为core.pager less -+S
这将由Git传递到Shell,它将最终命令转换为LESS=FRSX less -+S 环境告诉命令将S选项设置为切长行,但命令行将其重置为默认值以折叠长行。


有关新文档措辞的原因,请参见commit 97d01f2a

配置:重写core.pager文档

文字提到了core.pagerGIT_PAGER但没有给出总体优先级。 从git var (1)文档中借用更好的描述。

使用该机制允许系统范围的全局文件和每个存储库配置文件不限于此特定变量。 删除它以澄清该段。

重写说明环境变量LESS如何设置为Git的默认值以及如何有选择地自定义它的部分。


注意: 提交b327583Matthieu Moy moy ,2014年4月,对于git 2.0.x / 2.1,2014年第3季度)将默认删除S:

传呼机:默认情况下,从$ LESS中删除“ S”

默认情况下,Git会用来设置$LESS-FRSX如果$LESS不是由用户设定。
FRX标志实际上对Git有意义( FX因为有时Git的输出到short较短,而R由于Git的输出是彩色输出,所以R )。
另一方面, S标志(长行斩断)与Git不相关,而是用户喜好问题。 Git不应决定让用户更改LESS的默认值

更具体地说, S标志会损害查看寻呼机内不受信任代码的用户,因为补丁看起来像:

-old code; +new good code; [... lots of tabs ...] malicious code;

看起来与:

-old code; +new good code;

喜欢旧行为的用户仍然可以将$ LESS环境变量显式设置为-FRSX ,或将core.pager设置为' less -S '。

该文档将显示为:

环境未设置S选项,但命令行设置了该选项,从而减少了截断长行的指示。
同样,将core.pager设置为core.pager less -+F将从命令行禁用环境指定的F选项,从而禁用less的“ quit if one screen ”行为。
可以专门为某些命令激活一些标志:例如,将pager.blame设置为less -S仅对git blame启用行截断。


#3楼

--no-pager会告诉它不要使用寻呼机。 如果将输出-F放在单个屏幕中,则将选项-F传递给less将告诉它不分页。

用法:

git --no-pager diff

评论中的其他选项包括:

# Set an evaporating environment variable to use 'cat' for your pager
GIT_PAGER=cat git diff

# Tells 'less' not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then Git as usual
git diff

#4楼

您可以使用pager.alias使用自己的分页器向diff添加别名,如下所示:

[alias]
  dc = diff
  dsc = diff --staged
[pager]
  dc = cat
  dsc = cat

这将保持颜色不变,并在“ git dc”处调用时将“ cat”用作寻呼机。

另外, 不要做的事情:

  • 在您的别名中使用--no-pager 。 Git(1.8.5.2,Apple Git-48)会抱怨您正在尝试修改环境。
  • 使用带有!sh!git的shell。 这将绕过上面的环境错误,但会将您的工作目录(出于此命令的目的)重置为顶级Git目录,因此,如果您已经在以下目录的子目录中,则对本地文件的任何引用将不起作用您的存储库。

#5楼

您还可以为全局配置中的特定输出禁用/启用寻呼机:

git config --global pager.diff false

或设置core.pager选项,只需提供一个空字符串:

git config --global core.pager ''

我认为这比像您所说的将其设置为cat更好。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!