Por que menos é executado desnecessariamente pelo git?

22

Quando corro git branch(do bash ou do csh), ele canaliza automaticamente a saída less. No entanto, com apenas algumas ramificações no repositório, isso é mais do que desnecessário, é irritante, pois a listagem de ramificações desaparece quando eu saio menos.

A verificação de ~/.gitconfigarquivos e .git/configarquivos locais não encontra nada sobre um pager ou qualquer outra coisa que possa causar isso. Caso contrário, nada que eu tenha encontrado nas pesquisas na Web foi útil ou promissor.

Por que isso está acontecendo e o que (se alguma coisa) posso fazer para lessexecutar quando necessário (por exemplo, ao fazer um git logquando há muita história), mas não de outro modo (como um git branchcom apenas 2 ou 3 ramos)?

GreenMatt
fonte
4
Em geral, o git não sabe quanta saída haverá de qualquer comando, então envia tudo por padrão através de um pager, o que provavelmente será menor.
icarus
6
A primeira coisa a fazer em uma nova instalação -nix é colocar export LESS=-Xo arquivo .profile. Isso evita "limpar" a tela. Eu odeio -o de que a configuração padrão limpa a tela porque muitas vezes eu preciso cortar e colar material ou usá-lo como referência.
Peter - Restabelece Monica
3
@ Peter Para ser claro (sem trocadilhos), apenas pessoas que não desejam o comportamento de limpeza da tela devem fazer isso.
David Z
@icarus: Isso parece lógico. No entanto, o meu comportamento mudou recentemente. Não sei ao certo o porquê - provavelmente uma alteração em alguma variável de ambiente forçada a partir do pessoal de segurança corporativa "em alta" que não parece se importar com a dificuldade que eles tornam os trabalhos de todos os outros. De qualquer forma, o git repentinamente passou do que eu considerava um comportamento sensível para executar saídas de linha única por menos, de maneira que a saída foi perdida quando eu parei menos.
GreenMatt
Se o comportamento mudou recentemente, é pelo menos possível que uma configuração da variável LESS tenha sido adicionada aos arquivos de inicialização do shell em todo o sistema, por exemplo, / etc / profile, /etc/profile.d/*, /etc/bash.bashrc, Você tem essa variável em seu ambiente?
icarus

Respostas:

35

Você pode definir o seguinte:

git config --global core.pager 'less -FRX'

Isto irá assegurar que lessa vontade

  • Saia se o arquivo inteiro puder ser exibido na primeira tela (F )
  • Envie os caracteres de controle brutos para a formatação do terminal (R )
  • Pique linhas longas (S )
  • Não envie as strings init / de-init para o terminal - evita limpar a tela na saída ( X)

Edit: Removida a Sopção com base no comentário de Peter A. Scheider

QIS
fonte
7
e omita o --globalse você deseja que ele se aplique apenas ao repositório atual.
mosvy
8
Definir a variável de ambiente LESScomo -FR, adicionando X e S a gosto é outra maneira.
icarus
11
Muito provavelmente, o OP considera esse comportamento irritante em geral; Suponho que alguém possa definir a variável de ambiente export PAGER='less -FRSX'e o git a honre (sem uma configuração específica do git). Aliás, -Sé perigoso porque descarta silenciosamente a saída.
Peter - Restabelece Monica
4

Há ótimas respostas aqui para lesso comportamento do ajuste , mas como meus dedos de barba grisalha estão acostumados a digitar |morequando quero, e como ainda estou mais em sintonia com mercurial do que com git, estou interessado em

git config --global core.pager cat
dgc
fonte
3
A página de manual para git-configafirma que o valor de core.pagerdeve ser interpretado pelo shell. Quando você o define comono , ele tenta executar o comando no, o que provavelmente não existe, e volta a simplesmente produzir o conteúdo. Você ainda verá uma mensagem de erro na cabeça. O que você provavelmente deseja fazer é configurá-lo cat.
QIS
1
Essa é uma boa informação, mas o que eu gosto é que ela não executa nada . A caté inútil, e eu particularmente não confiar em Linux util mantenedores não mudar o gato não (cf. a lsarquivos debacle citado ). Talvez eu devesse usar "nunca" em vez disso. É menos provável que esse programa exista.
dgc 22/08
7
Configuração core.pagerpara a cadeia vazia ( git config core.pager '') ou catserá não executar nada. Você pode resolver isso sozinho se não acredita em mim ;-) Não há motivo algum para configurá-lo como um comando fictício no.
mosvy
Ótimo, obrigado! Eu não tinha ideia de que a sequência vazia não causaria execução de comando. Quanto a cat, você está dizendo que o git tem um caso especial para essa sequência no código do pager - isto caté, é efetivamente um sinônimo de "nulo"? Eu esperaria que fosse executado cat.
dgc 27/08
Este realmente parece ser o caso. Egads. Mas também é bom: estou sempre procurando mais maneiras de justificar minha aversão ao git.
dgc 27/08