¿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.


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

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).


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


9
Y si te preocupan los colores, hazlo git diff --color | cat(:
xjcl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.