Подтвердить что ты не робот

Как сделать git log not prompt для продолжения?

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

git config pager.branch false


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

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

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

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


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

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

Мой ответ несколько перефразирует следующий:
"запретить git diff использовать пейджер?"
fooobar.com/questions/17467/...

Было упомянуто, чтобы указать на другое соответствующее обсуждение.

Ответ 3

Вы передаете его на меньшее -F в случае, если -no-пейджер не работает для вас.

git log --decorate --oneline -5 | less -F

Ответ 4

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

git config --global core.pager ''