Як зробити так, щоб git log не запитував продовження?


93

У мене є декілька сховищ git, які належать разом, і простий файл batch / bash, щоб перебирати їх. Я часто цикую над ними за допомогою команди log, щоб швидко побачити, в якому вони стані. Це працює добре, за винятком одного: якщо повідомлення коміту довше, ніж кількість символів, моя консоль широка (або має кілька рядків), 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 пару раз, тоді як я просто хотів би бачити всі ці лайнери одним рухом.

Як я можу відключити цю поведінку (переважно, зберігаючи цей формат журналу)?


Відповіді:


156

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 .
Мікко Ранталайнен

@WarrenP gitпросто надає перевизначення, GIT_PAGER яке дозволить вам визначити власне значення, яке буде використовуватися замість того, PAGERколи git потребує підкачки.
Мікко Ранталайнен

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 буде використовувати для підкачки:

  • git config core.pager cat АБО
  • git config --global core.pager cat

Моя відповідь дещо переформулює наведену нижче:
"запобігти git diff використовувати пейджер?"
https://stackoverflow.com/a/6986231/6103242

На нього посилається інша відповідна дискусія.



2

Ви передаєте його менше -F на випадок, якщо - no-pager не працює для вас.

git log --decorate --oneline -5 | less -F
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.