Как сделать так, чтобы журнал git не предлагал продолжить?

93

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

> 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 пару раз, в то время как я просто хотел бы увидеть все эти строки за один раз.

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

stijn
источник
2
возможный дубликат того, почему я должен
нажимать

Ответы:

155

В 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
тоаби
источник
Есть ли способ сделать --no-pagerэтот параметр по умолчанию или даже лучше, если это необходимо? Я подумал о альясинге gitnpк git --no-pager, но я думаю , что есть лучшее решение.
Ислам Азаб
1
@IslamAzab, вы можете псевдоним gitдля /usr/bin/git --no-pagerкоторой будет отключить пейджер для всех ваших GIT вызовов.
mrkmg
1
@WarrenP gitне имеет встроенного пейджера. Вместо этого он следует философии Unix и использует все, что у вас есть $PAGER. gitпросто всегда использует $PAGERвместо того, чтобы делать это случайно, в отличие от многих других плохо написанных инструментов. Единственная магия gitесть в том , что , если $LESSэто не определено , оно будет определять $LESSдля значения FRX. Подробнее см. На github.com/git/git/blob/master/Documentation/config.txt#L766 .
Mikko Rantalainen
@WarrenP gitпросто предоставляет переопределение GIT_PAGER , которое позволит вам определить пользовательское значение, которое будет использоваться вместо того, PAGERкогда git требует разбиения на страницы.
Mikko Rantalainen
1
Самый простой случай, который исправляет поведение только для git: export GIT_PAGER = cat
Stragulus
17

Еще одно решение проблемы постоянного отключения пейджера именно при использовании 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 config core.pager cat ИЛИ
  • git config --global core.pager cat

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

Это делается для того, чтобы указать на еще одно важное обсуждение.

владЗамской
источник
3

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

git config --global core.pager '' 
марчозавр
источник
2

Вы перенаправляете его на less -F в случае, если --no-pager у вас не работает.

git log --decorate --oneline -5 | less -F
Ник Константин
источник