Quando vejo um grande diff com git diff
, ele é paginado com less
. Isso é confirmado abrindo outra janela e verificando os dados de ps -aux
e /proc
.
No entanto, quando less
é invocado pelo Git, ele não reverte o conteúdo do terminal para seu estado anterior após bater q
(o conteúdo diff permanece no terminal). Mas quando eu faço
git diff commit1 commit2 --color | less -R
e saia less
com uma tecla q
, o conteúdo desaparece e o terminal volta ao estado anterior.
Mais interessante, se eu fizer isso
export PAGER=less LESS='-R'
e invocar git diff
(ou qualquer outro comando que chame um pager), less
se comporta da mesma forma como se fosse invocado diretamente do shell Bash.
Aqui está uma breve captura de tela descrevendo minha pergunta. No painel esquerdo, o comando é executado da seguinte forma:
unset PAGER GIT_PAGER LESS
git diff HEAD^ HEAD
No painel direito você vê os comandos. O último commit foi de mais de 100 linhas de y
escrita em um arquivo. Em ambos os painéis less
sai-se com a tecla q
.
Alguém pode me dizer o que é diferente e explicar o porquê?
Documentação :
A opção
-X
(--no-init
) é responsável por não liberar o terminal após a saída doless
.