如何防止使用寻呼机的git diff?
是否有一个命令行开关传递给git diff
以及默认使用less
传呼机的其他命令?如何防止使用寻呼机的git diff?
我知道我可以管它给猫,但是这会删除所有的语法高亮。
我知道我可以通过GITPAGER=cat
(或类似的东西)设置的寻呼机在全球的.gitconfig猫;但我想有时传呼机(取决于diff的大小)。
但是,我更喜欢命令行开关,如果有的话;我无法找到一个,通过手册页。
--no-pager
git会告诉它不使用寻呼机。 -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
谢谢,我想我可以将git --no-pager别名为.bashrc中的gitc,对吧? – 2010-02-02 12:50:55
我不明白为什么不。我不知道如果用于一个根本不需要寻呼机的谓词,它会如何反应。 – 2010-02-02 12:53:14
或使用GIT_PAGER或PAGER环境变量或'core.pager' git配置变量。 – 2010-02-02 14:43:06
使用
git config --global core.pager cat
获得对所有库中的所有命令摆脱寻呼机。
您还可以通过使用pager.<cmd>
设置而不是core.pager
,你可以改变每git仓库的设置(省略--global
)禁用分页单git的子命令。
见man git-config
和搜索pager.<cmd>
了解详情。
问题不在于如何完全禁用寻呼机,而是如何为grep子命令禁用它。 mtahmed的答案是完美的。 – TilmanBaumann 2014-10-06 12:46:33
这可能是什么扩展的解释问,但这是我一直在寻找的,这是谷歌的最好结果之一,所以谢谢@geekQ – 2015-12-30 13:57:49
关于禁用颜色时管道:
使用--color
避免着色被禁用。
git diff --color | less -R
或配置它逼上(如中的.gitconfig):
[color]
ui = on
git diff | less -R
对于非彩色的工具,然后使用:
git diff --no-color | some-primitive-tool
导出e环境变量LESS=-R
(例如, .bashrc)中的“少”打开色彩支持默认:
git diff | less
请注意,git将设置'LESS'环境变量为'FRSX'时调用寻呼机,如果未设置。 – tobbez 2012-09-27 15:42:48
如前所述前面的回答,传递-F
选项较少导致其退出,如果含量小于一个屏幕,但是之后这样做屏幕重置,你最终没有看到内容,-X
选项会消除该行为。所以,我用下面的基于内容的数量,使有条件的分页:
git config --global --replace-all core.pager "less -F -X"
注意:我不得不在'git'1.8.0.2'中使用'git config --global --add core.pager'less -F -X“',上面的那个不起作用。 – Dogbert 2013-01-31 07:23:43
太棒了!另外,为了使它不仅适用于git,而且所有程序都会在''.bashrc'或'.zshrc'中添加'export LESS =“ - RFX”'' – defhlt 2014-10-13 19:07:33
谢谢!我一直困扰着git会从输出中截断第一行的选项,然后失去同步,使得沿着一条线然后向上一条线会导致正确的第一行占据顶部,接着是正确输出的第三行。无论如何,指定这个选项解决了这个问题。太离奇了。 – 2015-01-26 20:40:34
最近文档中的变化更不用说消除对less
默认选项(“默认选项”是FRSX
)的方式不同。
对于这个问题,这将是(GIT 1.8+)
git config --global --replace-all core.pager 'less -+F -+X'
例如,Dirk Bester建议in the comments:
export LESS="$LESS -FRXK"
,这样我会涂有颜色差异与按Ctrl-C退出
less
。
Wilson F提到in the comments和his question在于:
较少支持水平滚动,因此,当线被切掉,少禁用退出-IF-一个屏幕,使得用户仍然可以滚动文本到左边看看什么被切断了。
这些修改是在git的1.8.x的已经显现,如 “Always use the pager for git diff
”(见注释)所示。 但是文档刚被重新编写(for git 1.8.5 or 1.9, Q4 2013)。
供Git命令(例如'less')使用的文本查看器。
该值旨在由shell解释。偏好的顺序是:
- 的
$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的默认值以及如何选择性地对其进行定制的部分。
注:commit b327583(Matthieu Moy moy
,2014年4月,为git的2.0.x版本/ 2.1,Q3 2014)将在默认情况下删除S:
寻呼机:从$ LESS通过删除 'S'默认
Git默认用于设置
$LESS
到-FRSX
如果$LESS
不是由用户设定。FRX
flags实际上对Git有意义(F
和X
,因为有时输出的Git管道更短,而且因为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
到less -+F
将停用由来自命令行的环境指定的F
选项,去激活的less
的“quit if one screen
”的行为。
可以特别激活某些特定命令的标志:例如,将pager.blame
设置为less -S
仅启用git blame
的行截断。
谢谢,谢谢!我一直在寻找一种方法来让git停止为MONTHS排长队! – CoreDumpError 2014-01-06 20:10:43
@CoreDumpError注意:下一个Git(2.0.X或2.1)不会在默认情况下切成线**!看到我上面编辑的答案。 – VonC 2014-07-27 06:46:40
谢谢。这让我知道我想要导出LESS =“$ LESS -FRXK”,这样我就可以通过ctrl-c从较小的值退出而获得彩色差异。 – 2015-01-27 03:14:11
可以别名有自己的传呼机与pager.alias添加到差异,像这样:
[alias]
dc = diff
dsc = diff --staged
[pager]
dc = cat
dsc = cat
这将保持颜色上,当在“调用使用“猫”的寻呼机git dc'。
而且,事情不做:
- 使用--no寻呼机在你的别名。 Git(1.8.5.2,Apple Git-48)会抱怨你正在尝试修改环境。
- 使用带有!sh或!git的shell。这将绕过上面的环境错误,但会将您的工作目录(针对该命令的目的)重置为顶层git目录,因此如果您已经在您的子目录中,则对本地文件的任何引用都将不起作用回购。
您可以禁用/启用对全局配置特定输出寻呼机以及:
git config --global pager.diff false
或者到core.pager选项设置,只需要提供一个空字符串:
git config --global core.pager ''
正如你所说,这在我看来比将它设置为cat
更好。
这就是我在Git 1.9上的工作......一切都没有奏效。 – 2015-08-02 13:19:33
这是为我工作的那个'git version 2.5.4(Apple Git-61)' – 2016-02-18 14:47:51
这就是我想要的,因为其他命令完全禁用了寻呼机,但这是唯一的答案,只禁用'git diff'同时让它为其他命令工作 – SingleNegationElimination 2017-12-09 21:44:44
这在Linux的工作对我来说与GIT版本2.1.4:
git config --global --replace-all core.pager cat
这使得Git的使用cat
代替less
。 cat
只是将diff
的输出转储到屏幕上,无需分页。
通常,如果答案包含解释代码意图做什么的解释,以及为什么解决问题而不介绍其他命令,则答案会更有帮助。 (这篇文章被至少一个用户标记,大概是因为他们认为没有解释的答案应该被删除。) – 2015-04-19 01:20:48
@NathanTuggy我认为我很清楚,我正在回答所问的问题。看起来像一些用户喜欢跑来跑去标记简短的答案的乐趣。我会添加一些文字。 – jcoffland 2015-05-13 23:53:35
对于一个快速和肮脏的剧本我写的,我就是这么做的:
PAGER=cat git diff ...
我想禁用分页不时,当我知道的输出也不是很长。对于这一点,我找到了一个巧妙的方法使用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 3 commits without pager
git n show v1.1 # Show information about a tag
注意:'core.pager'less - + F - + X''是一种更新的方法来删除这些选项。请参见[我的答案](http://*.com/a/18781512/6309)。 – VonC 2013-09-13 08:19:11
“less - + F - + X”是去除长日志中令人讨厌的“......跳过......”标记的魔法设置。非常感谢这些选项,您拯救了我的一天! – 2014-05-12 09:04:36