Parar o submódulo do Git foreach de abrir menos para cada módulo

5

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

git submodule foreach 'git grep x'

No entanto, desde a mudança para o zsh, descubro que um prompt menor é 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 para:

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

Que alcança o que eu quero, mas não posso deixar de sentir que estou perdendo uma opção ou uma solução mais elegante. Existe um?

    
por Andy Smith 24.04.2013 / 11:10

3 respostas

3

Tente alterar o pager que o git usa:

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

Ou se você deseja 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 config ou, é claro, definir as variáveis de ambiente globalmente.

    
por 24.04.2013 / 14:24
2

Apenas para abordar os outros métodos:

Método 1: --nopager

git submodule foreach 'git --nopager grep x'

Método 2: desativar completamente o pager

git config --global core.pager cat

Na página de manual do git-config:

core.pager The command that git will use to paginate output. Can be overridden with the GIT_PAGER environment variable. Note that git sets the LESS environment variable to FRSX if it is unset when it runs the pager. One can change these settings by setting the LESS variable to some other value. Alternately, these settings can be overridden on a project or global basis by setting the core.pager option. Setting core.pager has no effect on the LESS environment variable behaviour above, so if you want to override git’s default settings this way, you need to be explicit. For example, to disable the S option in a backward compatible manner, set core.pager to less -+S. This will be passed to the shell by git, which will translate the final command to LESS=FRSX less -+S.

Método 3: pager.<cmd>

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

git config --global pager.grep cat

Na página de manual do git-config:

pager. If the value is boolean, turns on or off pagination of the output of a particular git subcommand when writing to a tty. Otherwise, turns on pagination for the subcommand using the pager specified by the value of pager.. If --paginate or --no-pager is specified on the command line, it takes precedence over this option. To disable pagination for all commands, set core.pager or GIT_PAGER to cat.

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

Você pode reconfigurar menos para que as páginas "condicionalmente" sejam usadas somente para arquivos cujo conteúdo seja maior do que o valor de uma tela ( -F ) e desabilitar menos da limpeza da tela depois ( X ).

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

Referências

por 24.04.2013 / 15:03
0

Neste caso, usei novamente o comando inteiro

git submodule ... | less

mas perdemos qualquer potencial formatação de subcomandos.

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

git config --global pager.submodule "less -FX"
    
por 05.09.2014 / 11:25

Tags