2

Я пытаюсь создать сценарий, который должен git log и обновляться каждую 1 секунду. Вот что у меня есть:

while :
do
clear
git log --all --decorate --oneline --graph
sleep 1
done

Это не работает, потому что git log ждет, когда пользователь нажмет q чтобы выйти - и цикл застрял. Как я могу это исправить?

2 ответа2

7

Вы можете сделать это однострочно с watch:

watch --color -n 3 git log --all --decorate --oneline --graph --color=always

Настройте флаг -n чтобы изменить частоту обновления.

5

Основываясь на этом ответе SO, вы можете прекратить необходимость выхода, добавив --no-pager сразу после git .

Это не команда log которая ожидает q , это less инструмент, который выполняет разбиение на страницы. Сказав git что вам не нужен пейджер, команда log распечатает все выходные данные и сразу же завершит работу.

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

Что-то вроде:

while :
do
clear
git --no-pager log --all --decorate --oneline -22 --graph
sleep 1
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .