【推荐】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
。
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.pager
和GIT_PAGER
但没有给出总体优先级。 从git var
(1)文档中借用更好的描述。使用该机制允许系统范围的全局文件和每个存储库配置文件不限于此特定变量。 删除它以澄清该段。
重写说明环境变量
LESS
如何设置为Git的默认值以及如何有选择地自定义它的部分。
注意: 提交b327583 ( Matthieu Moy moy
,2014年4月,对于git 2.0.x / 2.1,2014年第3季度)将默认删除S:
传呼机:默认情况下,从$ LESS中删除“ S”
默认情况下,Git会用来设置
$LESS
至-FRSX
如果$LESS
不是由用户设定。FRX
标志实际上对Git有意义(F
和X
因为有时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
更好。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3154115