代码之家  ›  专栏  ›  技术社区  ›  lprsd

如何防止Git Diff使用寻呼机?

git
  •  504
  • lprsd  · 技术社区  · 15 年前

    有命令行开关要传递到吗 git diff 以及其他使用 less 传呼机默认?

    我知道我可以通过管道把它发送给cat,但这会删除所有突出显示的语法。

    我知道我可以将global.gitconfig中的寻呼机设置为cat by GITPAGER=cat (或类似的东西);但我有时想要寻呼机(取决于diff的大小)。

    但是,如果有命令行开关的话,我更喜欢它;而且我在浏览手册页时找不到它。

    12 回复  |  直到 6 年前
        1
  •  557
  •   SJL    6 年前

    --no-pager to git会告诉它不要使用寻呼机。通过期权 -F 如果输出适合于一个屏幕,那么to 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
    
        2
  •  211
  •   ishaaq    11 年前

    如前所述,通过 -F 如果内容少于一个屏幕,则选择“减少”会使其退出,但是这样做之后,屏幕将被重置,并且您最终看不到内容, -X 选择可以消除这种行为。因此,我使用以下方法根据内容量启用条件分页:

    git config --global --replace-all core.pager "less -F -X"
    
        3
  •  134
  •   Neil    13 年前

    使用

    git config --global core.pager cat
    

    删除所有存储库的所有命令的寻呼机。

    您还可以使用 pager.<cmd> 设置而不是 core.pager 您可以更改每个Git存储库的设置(省略 --global )

    man git-config 寻找 寻呼机。<命令> 详情。

        4
  •  63
  •   Stefan van den Akker Raymond Hettinger    6 年前

    文档中最近的更改提到了删除默认选项的不同方法 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 退出 较少的 .

    Wilson F 提到 in the comments 而在 his question 那就是:

    Less支持水平滚动,因此当行被切掉时,Less禁用退出(如果一个屏幕),这样用户仍然可以向左滚动文本以查看被切掉的内容。


    这些修改已经在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
    (如果 较少 设置了环境变量,Git根本不更改它)。

    如果要有选择地覆盖git的默认设置 较少 ,你可以设定 寻呼机 例如 less -+S .
    这将由git传递给shell,后者将最终命令转换为 LESS=FRSX less -+S . 环境告诉命令设置 S 选项剪切长线,但命令行将其重置为默认的折叠长线。


    commit 97d01f2a 由于新文档措辞背后的原因:

    配置:重写 寻呼机 文档

    文中提到 核心传呼机 GIT_PAGER 没有给出优先权的总体情况。借用一个更好的描述 git var (1) 文档。

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

    重写解释环境变量 较少 设置为Git的默认值,以及如何有选择地自定义它。


    注: commit b327583 ( Matthieu Moy moy ,2014年4月,对于git 2.0.x/2.1,2014年第3季度),默认情况下将删除s:

    寻呼机:默认情况下从$less中删除's'

    默认情况下,git用于设置 $LESS -FRSX 如果 少美元 不是由用户设置的。
    这个 FRX 旗子实际上对Git有意义( F X 因为有时输出的Git管道会比较短,并且 R 因为Git管道彩色输出)。
    这个 S 另一方面,flag(切掉长线)与git无关,它是用户偏好的问题。 Git不应决定用户更改 较少 默认值 .

    更具体地说, S 标记会伤害在寻呼机中查看不受信任代码的用户,因为修补程序看起来像:

    -old code;
    +new good code; [... lots of tabs ...] malicious code;
    

    将与以下内容相同:

    -old code;
    +new good code;
    

    喜欢旧行为的用户仍然可以将$less环境变量设置为 FRSX 或将core.pager显式设置为' less -S '.

    文件内容如下:

    环境没有设置 S 选项,但命令行执行此操作,指示更少地截断长行。
    同样,设置 寻呼机 less -+F 将停用 f 由环境从命令行指定的选项,取消激活“ quit if one screen “行为 较少的 .
    可以为特定命令专门激活一些标志:例如,设置 pager.blame 少-秒 仅为启用行截断 git blame .

        5
  •  39
  •   mmtauqir    10 年前

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

    git config --global pager.diff false
    

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

    git config --global core.pager ''
    

    在我看来,这比 cat 正如你所说的。

        6
  •  9
  •   StellarVortex    13 年前

    关于管道时禁用的颜色:

    使用 --color 为了避免着色被禁用。

    git diff --color | less -R

    或强制配置(例如,gitconfig):

    [color]
            ui = on
    

    git diff | less -R

    对于非彩色工具,请使用:

    git diff --no-color | some-primitive-tool

    导出环境变量 LESS=-R (例如,bashrc)默认情况下在“更少”中启用颜色支持:

    git diff | less

        7
  •  7
  •   jcoffland    9 年前

    这对我在Linux中使用Git版本2.1.4很有用:

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

    这让Git有了用武之地 cat 而不是 less . 只是转储的输出 diff 在屏幕上没有任何分页。

        8
  •  6
  •   Joseph Cheek    11 年前

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

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

    这将保持颜色开启,并在“git dc”调用时使用“cat”作为寻呼机。

    还有,事物 要做:

    • 使用——别名中没有寻呼机。Git(1.8.5.2,Apple Git-48)会抱怨您试图修改环境。
    • 用贝壳吧!嘘!Git。这将绕过上面的环境错误,但会将工作目录(用于此命令)重置为顶级git dir,因此,如果您已经在repo的子目录中,则对本地文件的任何引用都将不起作用。
        9
  •  3
  •   daniel kullmann    9 年前

    我喜欢经常禁用分页,当我知道输出不太长的时候。为此,我发现了一个使用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
    
        10
  •  2
  •   Roberto Bonvallet    9 年前

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

    PAGER=cat git diff ...
    
        11
  •  1
  •   Is Ma    7 年前

    正如上面所说的 曼吉特 ,你可以使用 --no-pager 任何命令。

    我用它:

    git --no-pager diff
    git --no-pager log --oneline --graph --decorate --all -n 10
    

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

        12
  •  1
  •   sekmo    6 年前

    我身上有这个大块头 .gitconfig 它似乎工作正常(对diff和show都禁用):

    [pager]
        diff = false
        show = false