如何防止使用寻呼机的git diff?
有一个命令行开关传递给git diff
和默认使用less
寻呼机的其他命令?
我知道我可以pipe它猫,但是删除所有的语法突出显示。
我知道我可以设置在全局.gitconfig的寻呼机猫通过GITPAGER=cat
(或类似的东西); 但我想有时寻呼机(取决于diff的大小)。
但是,如果有命令行切换,我更喜欢; 我无法find一个,通过手册页。
--no-pager
git会告诉它不使用寻呼机。 如果输出适合在一个单一的屏幕上,less于-F
会告诉它不页面。
用法:
git --no-pager diff
评论的其他选项包括:
# set an evaporating environment variable to use cat for your pager GIT_PAGER=cat git diff # tell less not to paginate if less than a page export LESS='-F -X $LESS' # ...then git as usual git diff
正如前面提到的答案所述,如果内容小于一个屏幕,则将-F
选项传递给less会导致它退出,但是如果屏幕被重置并且最终没有看到内容,则-X
选项将取消那种行为。 所以,我使用以下内容来启用基于内容量的条件分页:
git config --global --replace-all core.pager "less -F -X"
使用
git config --global core.pager cat
摆脱寻呼机为所有存储库的所有命令。
你也可以通过使用pager.<cmd>
设置而不是core.pager
来禁用单个git子命令的pager.<cmd>
,你可以改变每个git仓库的设置(omit --global
)。
请参阅man git-config
并searchpager.<cmd>
了解详细信息。
文档中最近的更改提到了删除less
的默认选项(“默认选项”为FRSX
)的不同方式。
对于这个问题,这将是(git 1.8+)
git config --global --replace-all core.pager 'less -+F -+X'
例如, Dirk Bester 在评论中build议:
export LESS="$LESS -FRXK"
这样我就可以用Ctrl-C从
less
颜色中取出颜色差异。
威尔逊·F 在评论和他的问题中提到:
不太支持横向滚动,所以当行被切断时,less一些禁用如果一个屏幕退出,以便用户仍然可以向左滚动文本以查看被切断的内容。
这些修改已经在git 1.8.x中可见,如“ 总是使用寻呼机的git diff
”(见注释)所示。 但是文档刚刚被重新编写( 对于git 1.8.5或1 .9 ,2013年第四季度 )。
供Git命令使用的文本查看器(例如“less”)。
该值意味着由shell解释。优先顺序是:
$GIT_PAGER
环境variables,- 然后
core.pager
configuration,- 那么
$PAGER
,- 然后在编译时select默认值(通常是“less”)。
当
LESS
环境variables未设置时,Git将其设置为FRSX
(如果设置了LESS
环境variables,Git根本不会改变它)。如果你想有select地覆盖Git的
LESS
的默认设置,你可以设置core.pager
为例如less -+S
这将通过Git传递给shell,这将最终的命令转换为LESS=FRSX less -+S
环境告诉命令设置S
选项来切断长行,但命令行将其重置为默认值来折叠长行。
请参阅commit 97d01f2a了解新文档措辞背后的原因:
configuration:重写core.pager
文档
文中提到了
core.pager
和GIT_PAGER
没有给出优先级的整体画面。 从git var
(1)文档中借用更好的描述。使用该机制来允许系统范围,全局和每个存储库的configuration文件不限于这个特定的variables。 删除它来澄清段落。
重写说明如何将环境variables
LESS
设置为Git默认值的部分,以及如何select性地自定义它。
注意: 提交b327583 ( Matthieu Moy moy
,2014年4月,对于git 2.0.x / 2.1,2014年第三季度)将默认删除S:
寻呼机:默认从$ LESS中删除'S'
默认情况下,如果用户未设置
$LESS
,则Git将$LESS
设置$LESS
-FRSX
。
FRX
标志实际上对Git有意义(F
和X
因为有时输出Gitpipe道更短,R
因为Gitpipe道颜色输出)。
另一方面,S
标志(加长的行)与Git无关,并且是用户偏好的问题。 Git不应该为用户决定更改LESS
的默认值 。更具体地说,
S
标志会危害在寻呼机内检查不可信代码的用户,因为补丁看起来像:
-old code; +new good code; [... lots of tabs ...] malicious code;
会显示完全相同的:
-old code; +new good code;
偏好旧行为的用户仍然可以将$ LESS环境variables显式设置为
-FRSX
,或者将core.pager设置为less -S
'。
该文档将如下所示:
环境不会设置
S
选项,但是命令行的作用是减less缩短长行的操作。
同样,将core.pager
设置为less -+F
将从命令行中禁用环境指定的F
选项,取消激活“quit if one screen
”的行为less
。
我们可以特别激活某些特定命令的标志:例如,将pager.blame
设置为less -S
只启用git blame
行截断。
您也可以在全局configuration中禁用/启用特定输出的寻呼机:
git config --global pager.diff false
或者设置core.pager选项,只需提供一个空string:
git config --global core.pager ''
在我看来,这比在你说的那样把它设置成cat
更好。
关于配pipe时的禁用颜色:
使用--color
来避免着色被禁用。
git diff --color | less -R
或者将其强制configuration(例如在.gitconfig中):
[color] ui = on
git diff | less -R
对于非彩色工具,然后使用:
git diff --no-color | some-primitive-tool
导出环境variablesLESS=-R
(在例如.bashrc中)在“less”中默认打开颜色支持:
git diff | less
这在Linux下适用于git版本2.1.4:
git config --global --replace-all core.pager cat
这使得git使用cat
而不是less
。 cat
只是将diff
的输出转储到屏幕上diff
进行任何分页。
您可以使用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目录,所以如果你已经在你的子目录中,任何对本地文件的引用都不会工作回购。
对于我写的一个快速而肮脏的脚本,我这样做了:
PAGER=cat git diff ...
我喜欢不时地closures分页,当时我知道输出不是很长。 为此,我发现了一个巧妙的使用git别名的技巧:
git config --global --add alias.n '!git --no-pager'
或者将以下内容添加到〜/ .gitconfig的[alias]
部分:
n = !git --no-pager
这意味着你可以使用前缀n
来closures任何git命令的分页,即:
git n diff # Show the diff without pager git n log -n 3 # Show the last 3 commits without pager git n show v1.1 # Show information about a tag