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

时间:2010-02-02 12:22:08

标签: git

是否有命令行开关传递给git diff以及其他默认使用less寻呼机的命令?

我知道我可以将它传递给cat,但这会删除所有语法高亮显示。

我知道我可以将全局.gitconfig中的寻呼机设置为cat GITPAGER=cat(或类似的东西);但我希望有时会有寻呼机(取决于差异的大小)。

但是,如果有的话,我更喜欢命令行开关;我无法找到一个,通过手册页。

18 个答案:

答案 0 :(得分:578)

--no-pager git会告诉它不要使用寻呼机。将选项-F传递给less会告诉它如果输出适合单个屏幕则不会页面。

用法:

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

答案 1 :(得分:220)

如上所述,如果内容少于一个屏幕,则将-F选项传递给less会导致其退出,但是这样做后屏幕会重置并且您最终看不到内容, -X选项消除了这种行为。因此,我使用以下内容根据内容量启用条件分页:

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

答案 2 :(得分:138)

使用

git config --global core.pager cat

删除所有存储库的所有命令的分页器。

您还可以使用pager.<cmd>设置而不是core.pager禁用单个git子命令的分页,并且可以更改每个git存储库的设置(省略--global)。

请参阅man git-config并搜索pager.<cmd>了解详情。

答案 3 :(得分:65)

文档中最近的更改提到了另一种删除less默认选项的方法(&#34;默认选项&#34;为FRSX)。

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

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

例如,Dirk Bester建议in the comments

export LESS="$LESS -FRXK" 
  

这样我就可以从<{1}} Ctrl-C 退出彩色差异。

Wilson F提及in the commentshis question

  

less支持水平滚动,因此当切断线时,较少禁用quit-if-one-screen,以便用户仍然可以向左滚动文本以查看截断的内容。


这些修改在git 1.8.x中已经可见,如&#34; Always use the pager for git diff&#34; (见评论)。 但文档刚刚改写(for git 1.8.5 or 1.9, Q4 2013)。

  

供Git命令使用的文本查看器(例如,&#39; less&#39;)   该值应由shell解释。

     

优先顺序为:

     
      
  • less环境变量
  •   
  • 然后$GIT_PAGER配置,
  •   
  • 然后core.pager
  •   
  • 然后在编译时选择默认值(通常&#39; less&#39;)。
  •   
     

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

     

如果您想有选择地覆盖Git的LESS默认设置,您可以将LESS设置为例如core.pagerless -+S 即可。
  这将由Git传递给shell,它将最终命令转换为LESS=FRSX less -+S。环境告诉命令将S选项设置为切断长行,但命令行将其重置为默认值以折叠长行。


请参阅commit 97d01f2a,了解新文档措辞背后的原因:

config:重写core.pager文档

  

该文字提到core.pagerGIT_PAGER,但未提供优先顺序的总体情况。从git var(1)文档中借用更好的描述。

     

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

     

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


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

寻呼机:删除&#39; S&#39;来自$ LESS默认

  

默认情况下,如果用户未设置$LESS,则Git用于将-FRSX设置为$LESS
  FRX标志实际上对Git(FX有意义,因为有时输出Git管道较短是短的,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设置为&#39; less -S&#39;。

文档如下:

  

环境不设置S选项但命令行设置,指示较少截断长行。
  同样,将core.pager设置为less -+F会从命令行停用环境指定的F选项,停用&{34; quit if one screen&#34; less的行为   可以专门为特定命令激活某些标志:例如,将pager.blame设置为less -S只会为git blame启用行截断。

答案 4 :(得分:43)

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

git config --global pager.diff false

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

git config --global core.pager ''

我认为这比将你设置为cat更好。

答案 5 :(得分:9)

关于配管时的禁用颜色:

使用--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

答案 6 :(得分:8)

这适用于我在Linux中的git版本2.1.4:

git config --global --replace-all core.pager cat

这使得git使用cat而不是lesscat只是将diff的输出转储到屏幕上,没有任何分页。

答案 7 :(得分:6)

您可以使用pager.alias自己的寻呼机为diff添加别名,如下所示:

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

这将保持颜色并使用“猫”#39;作为在&#39; git dc&#39;。

中调用的寻呼机

此外,要做的事情:

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

答案 8 :(得分:4)

我的.gitconfig中有一个大块的东西,它似乎工作正常(对diff和show均禁用):

[pager]
    diff = false
    show = false

答案 9 :(得分:3)

当我知道输出不是很长时,我喜欢不时禁用分页。为此,我发现了一个使用git别名的巧妙技巧:

git config --global --add alias.n '!git --no-pager'

或者将以下内容添加到〜/ .gitconfig的[alias]部分:

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

答案 10 :(得分:2)

对于我写的一个快速而又脏的脚本,我这样做了:

.ToList()

答案 11 :(得分:1)

正如 man git 所述,您可以在任何命令上使用Executing task 'update' run: mkdir Hello Login password for 'ubuntu':

我用它:

--no-pager

然后使用别名来避免使用(和记住)长命令。

答案 12 :(得分:1)

对于Windows,它是:

git config --global core.pager ""

这将关闭git中所有内容的分页,包括git branch中超级烦人的页面。

答案 13 :(得分:0)

如果您使用oh-my-zsh,请在〜/ .oh-my-zsh / lib / misc.zsh文件中,注释此行
env_default'LESS''-R'

答案 14 :(得分:0)

git -P diff

--no-pager

顺便说一句:与猫保持色彩

git diff --color=always | cat

答案 15 :(得分:0)

默认情况下,git使用较少的页面作为寻呼机。我通常更喜欢,因为它将打印第一页,然后让您滚动浏览内容。

此外,完成后内容将保留在控制台中。通常这很方便,因为您经常想在查找后对内容进行一些操作(例如,向提交者发送电子邮件,并告诉他在上一次提交中引入了一个错误)。

如果您随后要传送内容,则滚动以打印所有内容将很不方便。拥有更多好处的是,您将能够将其与管道结合起来,并将管道贯穿所有事物,例如。

# 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'

答案 16 :(得分:0)

只需遵循以下说明即可。

  1. 只需在终端中输入vi ~/.gitconfig
  2. 粘贴LESS="-F -X $LESS"行。
  3. :wq并输入。
  4. 重新启动终端。

答案 17 :(得分:0)

与此相关,如果您设置了默认寻呼机,并且想要创建使用不同寻呼机的别名,则可以使用 test elapsed replications 2 roll_mean_benchmark() 4.463 100 1 roll_mean_k_efficient(x = x, k = 3) 0.039 100 选项将配置参数仅传递给一个命令。

例如,我将 delta 配置为我的默认 git 寻呼机,但我可以创建一个 -c 这样的 git 别名,用于我想使用 lessdiff 的情况。< /p>

less