Impedir que o submódulo foreach do Git abra menos para cada módulo

Impedir que o submódulo foreach do Git abra menos para cada módulo

Ocasionalmente, preciso percorrer os submódulos git para os quais uso:

git submodule foreach 'git grep x'

No entanto, desde que mudei para zsh, descobri que menos prompt é aberto para cada submódulo, mesmo quando não há opções. O que eu prefiro é que toda a saída seja impressa no terminal.

Minha solução atual é ligar:

git submodule foreach 'git grep x' > /tmp/a && cat /tmp/a

O que alcança o que desejo, mas não posso deixar de sentir que estou perdendo uma opção ou uma solução mais elegante. Existe algum?

Responder1

Tente alterar o pager que o git usa:

GIT_PAGER="cat" git submodule foreach 'git grep x'

Ou se você quiser que menos seja usado, mas somente quando a saída sair da tela:

GIT_PAGER="less -FX" git submodule foreach 'git grep x'

Você pode definir o pager por projeto usando git configou, é claro, definir as variáveis ​​de ambiente globalmente.

Responder2

Apenas para cobrir os outros métodos:

Método 1:--nopager

git submodule foreach 'git --nopager grep x'

Método nº 2: desabilitar completamente o pager

git config --global core.pager cat

Na página de manual do git-config:

core.pager O comando que o git usará para paginar a saída. Pode ser substituído pela variável de ambiente GIT_PAGER. Observe que o git define a variável de ambiente LESS como FRSX se ela não estiver definida ao executar o pager. Pode-se alterar essas configurações definindo a variável LESS para algum outro valor. Como alternativa, essas configurações podem ser substituídas em um projeto ou globalmente, definindo a opção core.pager. Definir core.pager não tem efeito no comportamento da variável de ambiente LESS acima, portanto, se quiser substituir as configurações padrão do git dessa forma, você precisa ser explícito. Por exemplo, para desabilitar a opção S de maneira compatível com versões anteriores, defina core.pager como less -+S. Isso será passado para o shell pelo git, que traduzirá o comando final para LESS=FRSX less -+S.

Método #3:pager.<cmd>

Você também pode desabilitar a paginação para subcomandos git únicos usando pager. configuração em vez de core.pager e você pode alterar suas configurações por repositório git (omitir --global).

git config --global pager.grep cat

Na página de manual do git-config:

pager. Se o valor for booleano, ativa ou desativa a paginação da saída de um subcomando git específico ao gravar em um tty. Caso contrário, ativa a paginação para o subcomando usando o pager especificado pelo valor de pager.. Se --paginate ou --no-pager for especificado na linha de comando, ele terá precedência sobre esta opção. Para desabilitar a paginação para todos os comandos, defina core.pager ou GIT_PAGER como cat.

Método #4: Modificando o comportamento de menos ( -F -X)

Você pode reconfigurar less para que ele pagina "condicionalmente" apenas para arquivos cujo conteúdo seja maior que o valor de uma tela ( -F) e desabilitar less de limpar a tela posteriormente ( X).

git config --global core.pager less -F -X

Referências

Responder3

Neste caso eu costumava paginar novamente todo o comando

git submodule ... | less

mas perdemos qualquer formatação potencial dos subcomandos.

Então percebi que temos o mesmo problema com "git status", então depois de ler a resposta para "Como posso ativar um pager para a saída do status do git?" Eu sugeriria

git config --global pager.submodule "less -FX"

informação relacionada