Как сделать так, чтобы git log не предлагал продолжить? - PullRequest
69 голосов
/ 12 октября 2011

У меня есть несколько git-репозиториев, которые принадлежат друг другу, и простой пакетный / bash-файл для их зацикливания. Я часто зацикливаю их с помощью команды log, чтобы быстро увидеть, в каком состоянии они находятся. Это хорошо работает, за исключением одной вещи: если сообщение коммита длиннее, чем число символов моей консоли (или несколько строк), git показывает строку, затем новую строку с (END), и мне нужно нажать q , чтобы продолжить (я думаю, это передает данные через more или что-то подобное). Пример:

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log

625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log

dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

Это довольно неудобно, так как мне приходится нажимать q пару раз, тогда как я просто хотел бы видеть всех этих вкладчиков за один раз.

Как я могу отключить это поведение (желательно при сохранении этого формата журнала)?

Ответы [ 4 ]

104 голосов
/ 12 октября 2011

Git имеет возможность отключить пейджер:

git --no-pager log --decorate=short --pretty=oneline -n1

Если ваш пейджер обрезает строки, и вы хотите сохранить это поведение, либо направьте трубку к cut ...

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

... или установите переменную окружения GIT_PAGER перед вызовом:

GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1
4 голосов
/ 13 октября 2018

Другое решение проблемы постоянного отключения пейджера , особенно при использовании подкоманды log:

  • только для текущего репо:
    git config pager.log false

  • для вашей установки git (т.е. все репозитории на вашем компьютере):
    git config --global pager.log false

Как вы можете догадаться, работает то же самоеесли пейджер необходимо, чтобы он был включен или выключен для некоторых других подкоманд выборочно.
E. g.для подкоманды branch (которая печатает ветви) это будет

git config pager.branch false


Предлагаемое решение, возможно, более элегантно по сравнению с

  • используя git --no-pager каждый раз, когда вы запускаете определенную команду.
    Потому что, вполне возможно, вы не хотите вводить ее каждый раз.

  • указание git --no-pager в качестве псевдонимадля git
    Поскольку, вполне возможно, вы хотите избежать неявной глобальной конфигурации ИЛИ вы хотите, чтобы пейджер был включен в некоторых случаях.

  • полагаются на некоторые переменные окружения, такие как PAGER или GIT_PAGER.
    Поскольку для этого вам необходимо убедиться, что они установлены в вашем текущем сеансе терминала.И, если вы хотите, чтобы они автоматически устанавливались на какое-то пользовательское значение при каждом создании нового терминала, вам нужно изменить один из загружаемых файлов оболочки, например, ~/.bashrc.Это не большая проблема.Но эти загруженные файлы часто изменяются и другими приложениями и содержат множество других вещей, не только используемых Git.Таким образом, теоретически лучше указывать настройки, связанные с git, используя git config, а не вставлять их, например, ~/.bashrc.


Альтернативное решение для отключения pagerдля всех подкоманд необходимо указать cat, поскольку утилита git будет использовать для подкачки:

  • git config core.pager cat ИЛИ
  • git config --global core.pager cat

Мой ответ несколько перефразирует приведенный ниже:
"запретить git diff использовать пейджер?"
https://stackoverflow.com/a/6986231/6103242

В нем упоминается еще один важныйобсуждение.

1 голос
/ 02 марта 2017

Вы отправляете это меньше -F, если --no-pager у вас не работает.

git log --decorate --oneline -5 | less -F
0 голосов
/ 07 июня 2019

Отключить пейджер для всех команд:

git config --global core.pager '' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...