Como fazer git diff escrever em stdout?

94

Por padrão git diffimprime todas as +-linhas para o stdout, entretanto eu tenho uma máquina (devian) (que eu conecto por meio de ssh) onde git diffme leva a um editor (que não sei qual é) e preciso pressionar qpara continuar.

Eu verifiquei a configuração do git e parece:

$ git config --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=XXX
branch.master.remote=origin
branch.master.merge=refs/heads/master
$ git config --global --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
$ git config --system --list
'/etc/gitconfig': No such file or directory

Existe um lugar que estou perdendo? Talvez a ferramenta desconhecida seja um fallback ou algo assim porque está faltando alguma coisa em minha máquina? Qualquer ajuda é apreciada. Obrigado.

nacho4d
fonte
possível duplicata de Como evito que o git diff use um pager?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respostas:

168

Por padrão, o Git envia sua saída diff (e geralmente qualquer saída que possa ser mais do que uma tela cheia) para o pager do sistema , que é um utilitário que imprime apenas uma tela cheia de saída por vez. Se você deseja desativar o pager ao executar um comando, passe --no-pagerpara o Git:

$ git --no-pager <subcommand> <options>

Isso pode ser executado para qualquer comando Git.

Se você deseja desabilitá-lo por padrão apenas para diff , você pode definir o pager diff catexecutando:

$ git config pager.diff false

Se quiser desativá-lo por padrão para todos os comandos , você pode definir o pager Git catexecutando:

$ git config --global core.pager cat
mipadi
fonte
Não sabia sobre o pager. git config --global core.pager catfez isso !. Obrigado :)
nacho4d
4
@aaronbauman: Você passou para git( não para o subcomando)?
mipadi
Eu vejo, "git --no-pager diff" é diferente de "git diff --no-pager". Obrigado pelo esclarecimento
aaronbauman
1
A mesma coisa funciona para git branch, por exemplogit config pager.branch false
dinjas
30

O core.pagervalor a seguir usa less, que imprime em stdout e também tem funcionalidade de pager (se necessário), permitindo rolar para cima e para baixo (ao contrário cat):

$ git config --global core.pager "less -FRSX"

Ele fecha imediatamente se o diff couber na primeira tela ( -F), produz caracteres de controle brutos ( -R), corta linhas longas em vez de envolver ( -S) e não usa strings termcap init / deinit ( -X).

Friederbluemle
fonte
1
Obrigado .. Eu estava procurando por essa opção em toda a internet :)
obai
Este é o que eu quero
user3595632
22

Você também pode simplesmente usar catpara qualquer gitcomando se não se importar com as cores.

Então, git diff | catpara o seu caso.

Editar: conforme apontado nos comentários, se você se preocupa com o uso de cores:

git diff --color | cat

Shasak
fonte
9
E se você se preocupa com as cores, faça git diff --color | cat(:
xjcl