【问题标题】:Make git diff not to print to terminal让 git diff 不打印到终端
【发布时间】:2018-07-14 16:44:36
【问题描述】:

如果我做less somefile.txtman bash(内部使用less),它会显示内容,但按Q后,内容就会消失。

git diff 也使用less,但输出仍保留在控制台中。如何使gitman 行为相同?


当前行为

me@mypc:~$ git diff
# I look at the diff and then press q. But it's all printed to the console
diff --git a/somefile.txt b/somefile.txt
...
...
...
me@mypc:~$
me@mypc:~$ less somefile.txt
# I look at the file content, but after I press q, console appears and nothing is printed there
me@mypc:~$

我意识到 git 的行为就像less -X,那么如果没有这个选项,我怎么能强制 git 少运行呢?

【问题讨论】:

    标签: git less-unix


    【解决方案1】:

    这是less -F -X的效果;在git-config(1) 中查看core.pager

    来自less(1)

       -F or --quit-if-one-screen
              Causes less to automatically exit if the entire file can be dis‐
              played on the first screen.
    
       -X or --no-init
              Disables sending the termcap initialization and deinitialization
              strings  to  the  terminal.   This is sometimes desirable if the
              deinitialization string does something unnecessary, like  clear‐
              ing the screen.
    

    这里提到的“init”的一部分涉及到切换到备用屏幕,以便保留主屏幕。


    来自git-config(1)

       core.pager
           Text viewer for use by Git commands (e.g., less). The value is
           meant to be interpreted by the shell. The order of preference is
           the $GIT_PAGER environment variable, then core.pager configuration,
           then $PAGER, and then the default chosen at compile time (usually
           less).
    
           When the LESS environment variable is unset, Git sets it to FRX (if
           LESS environment variable is set, Git does not change it at all).
           If you want to selectively override Git’s default setting for LESS,
           you can set core.pager to e.g.  less -S. This will be passed to the
           shell by Git, which will translate the final command to LESS=FRX
           less -S. The environment does not set the S option but the command
           line does, instructing less to truncate long lines. Similarly,
           setting core.pager to less -+F will deactivate the F option
           specified by the environment from the command-line, deactivating
           the "quit if one screen" behavior of less. One can specifically
           activate some flags for particular commands: for example, setting
           pager.blame to less -S enables line truncation only for git blame.
    
           Likewise, when the LV environment variable is unset, Git sets it to
           -c. You can override this setting by exporting LV with another
           value or setting core.pager to lv +c.
    

    【讨论】:

    • 是的,我明白了,但是 1)即使是长文件也会发生这种情况(我意识到这是因为更少的 -X)和 2)我怎样才能禁用它?
    • 添加-+X 以及提到的-+F
    • export LESS=R。好的,这就是我的问题的解决方案。但我还有一个:现在,即使是短输入(如git config -l),也更少打开,而不是打印它们 -FX。我怎样才能保持这种行为,但在不打印到控制台的情况下用更少的文件打开更长的文件?我很确定这个问题(和答案)存在,但找不到任何...
    • 啊,那样的话你确实想保留-F
    • 不幸的是,我没有……我有更少的 v487,它不会用-F 打印任何东西。 (unix.stackexchange.com/a/432254)。但是那个问题有解决方法,所以我使用它们......无论如何,你的回答回答了我原来的问题,所以接受。
    猜你喜欢
    • 2023-03-19
    • 2020-04-06
    • 1970-01-01
    • 2013-06-27
    • 2013-09-14
    • 1970-01-01
    • 2020-02-24
    • 2017-09-26
    • 2014-06-18
    相关资源
    最近更新 更多