¿Cómo hacer que git diff escriba en stdout?

93

De forma predeterminada, git diffimprime todas las +-líneas en la salida estándar, sin embargo, tengo una máquina (devian) (que conecto a través de ssh) donde git diffme lleva a un editor (que no sé cuál es) y necesito presionar qpara continuar.

Tengo el comprobador de configuración de git y se ve así:

$ 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

¿Hay un lugar que me falta? ¿Quizás la herramienta desconocida es una alternativa o algo porque a mi máquina le falta algo? Se agradece cualquier ayuda. Gracias.

nacho4d
fuente
posible duplicado de ¿Cómo evito que git diff use un localizador?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

167

De forma predeterminada, Git envía su salida de diferencias (y generalmente cualquier salida que pueda ser más de una pantalla completa) al buscapersonas del sistema , que es una utilidad que imprime solo una pantalla completa de salida a la vez. Si desea deshabilitar el buscapersonas cuando ejecuta un comando, pase --no-pagera Git:

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

Esto se puede ejecutar para cualquier comando de Git.

Si desea deshabilitarlo de forma predeterminada solo para diff , puede configurar el paginador de diff catejecutando:

$ git config pager.diff false

Si desea deshabilitarlo de forma predeterminada para todos los comandos , puede configurar el localizador de Git en catejecutando:

$ git config --global core.pager cat
mipadi
fuente
No sabía nada del buscapersonas. git config --global core.pager cat¡lo hizo!. Gracias :)
nacho4d
4
@aaronbauman: ¿Se lo pasó a git( no al subcomando)?
mipadi
Ya veo, "git --no-pager diff" es diferente a "git diff --no-pager". Gracias por la aclaración
aaronbauman
1
Lo mismo funciona para git branch, por ejemplogit config pager.branch false
dinjas
30

El seguimiento core.pager valor utiliza less, que se imprime en la salida estándar, y también tiene la función de buscapersonas (si es necesario), lo que permite desplazarse hacia arriba y hacia abajo (a diferencia de cat):

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

Se cierra inmediatamente si el diff encaja en la primera pantalla ( -F), genera caracteres de control sin procesar ( -R), corta líneas largas en lugar de ajustar ( -S) y no usa termcap init / deinit strings ( -X).

friederbluemle
fuente
1
Gracias ... Estaba buscando esta opción en Internet :)
obai
Este es lo que quiero
user3595632
20

También puede usarlo simplemente catpara cualquier gitcomando si no le importan los colores.

Así que git diff | catpara tu caso.

Editar: como se señaló en los comentarios, si le importan los colores, use:

git diff --color | cat

Shasak
fuente
9
Y si te preocupan los colores, hazlo git diff --color | cat(:
xjcl