默认情况下git diff
,是否存在要传递给命令行的命令行开关以及其他使用less
寻呼机的命令?
我知道我可以将其通过管道传递给cat,但是这样可以删除所有语法突出显示。
我知道我可以将全局.gitconfig中的传呼机设置为cat by GITPAGER=cat
(或类似方式);但我有时想传呼(取决于diff的大小)。
但是,如果有的话,我希望使用命令行开关。我找不到手册页中的内容。
默认情况下git diff
,是否存在要传递给命令行的命令行开关以及其他使用less
寻呼机的命令?
我知道我可以将其通过管道传递给cat,但是这样可以删除所有语法突出显示。
我知道我可以将全局.gitconfig中的传呼机设置为cat by GITPAGER=cat
(或类似方式);但我有时想传呼(取决于diff的大小)。
但是,如果有的话,我希望使用命令行开关。我找不到手册页中的内容。
Answers:
--no-pager
Git会告诉它不要使用寻呼机。如果将输出传递给单个屏幕-F
,less
则传递选项to 将告诉它不分页。
用法:
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
core.pager
git config变量。
-E
到less
选项中以使其-F
可用。
--no-pager
别名,则必须在命令前加上前缀,为避免错误,必须创建如下别名:git config alias.foo '!git --no-pager foo'
。有点令人困惑。只是简单地使用别名是'--no-pager foo'
行不通的。
如前面提到的那样,如果内容少于一个屏幕,则将-F
选项传递给less
导致其退出。但是,这样做之后,屏幕被重置,最终您看不到内容。
该-X
选项消除了该行为。因此,我使用以下内容基于内容量启用条件分页:
git config --global --replace-all core.pager "less -F -X"
git config --global --add core.pager "less -F -X"
在git中使用,1.8.0.2
上面的那个没有用。
export LESS="-RFX"
.bashrc
.zshrc
-X
这样。如果您不喜欢它,请不要使用它。我之所以喜欢它,是因为这样我可以通过查看历史记录中以前的git命令的结果来引用诸如git SHA之类的东西,而无需再次键入命令。每个人都自己。
采用
git config --global core.pager cat
摆脱所有存储库中所有命令的寻呼机。
您还可以通过使用pager.<cmd>
设置而不是来禁用单个Git子命令的分页core.pager
,并且可以更改每个Git存储库的设置(忽略--global
)。
查看man git-config
并搜索pager.<cmd>
详细信息。
文档中的最新更改提到了一种删除的默认选项的不同方式less
(“默认选项”为FRSX
)。
对于这个问题,这将是(git 1.8+)
git config --global --replace-all core.pager 'less -+F -+X'
例如,Dirk Bester 在评论中建议:
export LESS="$LESS -FRXK"
这样我就Ctrl-C从退出了
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根本不会更改它)。如果要有选择地覆盖Git的默认设置
LESS
,则可以设置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 Moymoy
,2014年4月,对于git 2.0.x / 2.1,2014年第3季度)将默认删除S:
默认情况下,Git曾经设置
$LESS
为-FRSX
如果$LESS
用户未设置。
这些FRX
标志对于Git实际上是有意义的(F
并且X
因为有时输出Git传递到less会很短,并且R
Git的输出彩色的)。
的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
为less -+F
将会F
从命令行停用环境指定的选项,从而停用的quit if one screen
行为less
。
可以专门为某些命令激活一些标志:例如,设置pager.blame
为less -S
仅对启用行截断git blame
。
您还可以为全局配置中的特定输出禁用/启用寻呼机:
git config --global pager.diff false
或设置core.pager选项,只需提供一个空字符串:
git config --global core.pager ''
我认为这比cat
您所说的更好。
git version 2.5.4 (Apple Git-61)
git diff
同时仅对其他命令有效
code "$($env:UserProfile)\.gitconfig"
并pager =
在[core]
设置下添加。答案适用于我当前的powershell会话,但似乎没有将设置保存到任何地方,因此在下次启动时有效。
关于配管时禁用的颜色:
使用--color
以避免着色被禁用。
git diff --color | less -R
或强制将其配置(例如在.gitconfig中):
[color]
ui = on
git diff | less -R
对于非彩色工具,请使用:
git diff --no-color | some-primitive-tool
导出环境变量LESS=-R
(例如,.bashrc)默认情况下在“ less”中启用颜色支持:
git diff | less
LESS
环境变量FRSX
设置为。
这适用于Linux上的Git 2.1.4版本:
git config --global --replace-all core.pager cat
这使得Git使用cat
而不是less
。cat
只是将输出内容转储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
。这将绕过上面的环境错误,但会将您的工作目录(出于此命令的目的)重置为顶级Git目录,因此,如果您已经在以下目录的子目录中,则对本地文件的任何引用将不起作用您的存储库。git log
而不是时,此技术很有用git log --oneline
。使用和pager.log = less -FXR +/^commit.*
,同时--oneline
对alias.l1 = log --oneline
和设置选项的大小写pager.l1 = less -FXR
。
当我知道输出不是很长时,我不时禁用分页。为此,我发现了一个使用Git别名的巧妙技巧:
git config --global --add alias.n '!git --no-pager'
或将以下内容添加到[alias]
〜/ .gitconfig部分:
n = !git --no-pager
这意味着您可以使用前缀n
关闭任何Git命令的分页,即:
git n diff # Show the diff without pager
git n log -n 3 # Show the last three commits without pager
git n show v1.1 # Show information about a tag
对于我编写的快速脚本,我这样做是这样的:
PAGER=cat git diff ...
$GIT_PAGER
已设置,则无法使用。git --no-pager
做到相同但更可靠。
对于Windows,它是:
git config --global core.pager ""
这将关闭所有输入的分页git
,包括超级烦人的输入git branch
。
如果您使用oh-my-zsh,请在~/.oh-my-zsh/lib/misc.zsh
文件中注释以下行:
env_default 'LESS' '-R'
unset LESS
在.zshrc的末尾添加 。
默认情况下,git use使用少作为寻呼机。我通常更喜欢,因为它将打印第一页,然后让您滚动浏览内容。
此外,完成后,内容将保留在控制台中。通常这很方便,因为您经常想在查找后对内容进行一些操作(例如,向提交者发送电子邮件,并告诉他在上一次提交中引入了一个错误)。
如果随后要管道传输内容,则滚动以打印所有内容将很不方便。拥有更多好处的是,您将能够将其与管道结合使用,并且它将通过所有管道进行管道传输,例如。
# Find the commit abcdef123 in the full commit history and read author and commit message
git log |grep -C 5 'abcdef123'
基本上,您将只需要更多,除非您不想在完成后将内容保留在控制台中。要使用更多,请执行以下操作。
git config --global core.pager 'more'
core.pager 'less -+F -+X'
这是删除这些选项的最新方法。请参阅下面的答案。