Иногда мне нужно выполнить grep через подмодули git, для этого я использую:
git submodule foreach 'git grep x'
Однако, с тех пор как я переключился на zsh, я обнаружил, что для каждого подмодуля открывается меньше приглашений, даже когда нет никаких опций. Я бы предпочел, чтобы весь вывод был выведен на терминал.
Мое текущее решение — позвонить:
git submodule foreach 'git grep x' > /tmp/a && cat /tmp/a
Что позволяет мне достичь желаемого, но я не могу отделаться от ощущения, что упускаю вариант или более элегантное решение. Есть ли оно?
решение1
Попробуйте изменить пейджер, который использует git:
GIT_PAGER="cat" git submodule foreach 'git grep x'
Или если вы хотите, чтобы использовалось меньше, но только когда вывод будет выходить за пределы экрана:
GIT_PAGER="less -FX" git submodule foreach 'git grep x'
Вы можете задать пейджер для каждого проекта с помощью git config
, или, конечно, можете задать переменные среды глобально.
решение2
Чтобы охватить другие методы:
Метод №1:--nopager
git submodule foreach 'git --nopager grep x'
Метод №2: полное отключение пейджера
git config --global core.pager cat
Из страницы руководства git-config:
core.pager Команда, которую git будет использовать для разбиения вывода на страницы. Может быть переопределена с помощью переменной среды GIT_PAGER. Обратите внимание, что git устанавливает переменную среды LESS в FRSX, если она не установлена при запуске пейджера. Можно изменить эти настройки, установив переменную LESS в какое-либо другое значение. Кроме того, эти настройки можно переопределить на уровне проекта или глобально, установив параметр core.pager. Настройка core.pager не влияет на поведение переменной среды LESS, указанное выше, поэтому, если вы хотите переопределить параметры git по умолчанию таким образом, вам нужно сделать это явно. Например, чтобы отключить параметр S в обратно совместимом режиме, установите core.pager в less -+S. Это будет передано оболочке git, которая преобразует окончательную команду в LESS=FRSX less -+S.
Метод №3:pager.<cmd>
Вы также можете отключить подкачку для отдельных подкоманд git, используя настройку pager. вместо core.pager, и вы можете изменить свои настройки для каждого репозитория git (пропустить --global).
git config --global pager.grep cat
Из страницы руководства git-config:
pager. Если значение логическое, включает или выключает разбиение на страницы вывода конкретной подкоманды git при записи в tty. В противном случае включает разбиение на страницы для подкоманды с использованием пейджера, указанного значением pager. Если в командной строке указано --paginate или --no-pager, оно имеет приоритет над этим параметром. Чтобы отключить разбиение на страницы для всех команд, установите core.pager или GIT_PAGER в cat.
Метод №4: Изменение поведения less ( -F -X
)
Вы можете перенастроить less так, чтобы он «условно» перебирал страницы только для файлов, содержимое которых превышает размер экрана ( -F
), и отключить очистку экрана после этого ( X
).
git config --global core.pager less -F -X
Рекомендации
решение3
В этом случае я перепечатывал всю команду
git submodule ... | less
но мы теряем любое потенциальное форматирование из подкоманд.
Затем я понял, что у нас та же проблема с "git status", поэтому, прочитав ответ на "Как включить пейджер для вывода git status?"Я бы предложил
git config --global pager.submodule "less -FX"