¿Cómo hacer que git log no solicite continuar?

93

Tengo un par de repositorios de git que van juntos, y un archivo simple por lotes / bash para recorrerlos. A menudo los recorro con un comando de registro para ver rápidamente en qué estado se encuentran. Esto funciona bien, excepto por una cosa: si el mensaje de confirmación es más largo que el número de caracteres, mi consola es ancha (o tiene varias líneas), git muestra la línea, luego una nueva línea con (FIN) y tengo que presionar q para continuar (supongo que canaliza la salida a través de más o algo así). Ejemplo:

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log

625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log

dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

Esto es bastante inconveniente ya que tengo que presionar q un par de veces, mientras que me gustaría ver todos esos delineadores de una sola vez.

¿Cómo puedo desactivar este comportamiento (preferiblemente manteniendo este formato de registro)?

stijn
fuente

Respuestas:

155

Git tiene una opción para deshabilitar el buscapersonas:

git --no-pager log --decorate=short --pretty=oneline -n1

Si su buscapersonas corta líneas y desea conservar ese comportamiento, canalice a cut...

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

... o establezca la variable de entorno GIT_PAGERantes de la invocación:

GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1
toabi
fuente
¿Hay alguna forma de establecer --no-pagerel valor predeterminado o incluso mejor en un acceso directo para esta opción cuando sea necesario? Pensé en crear gitnpun alias git --no-pager, pero creo que hay una solución mejor.
Islam Azab
1
@IslamAzab, podría utilizar un alias gitpara /usr/bin/git --no-pagerdeshabilitar el buscapersonas para todas sus llamadas a git.
mrkmg
1
@WarrenP gitno tiene localizador incorporado. En cambio, sigue la filosofía de Unix y usa lo que tenga $PAGER. gitsimplemente siempre usa en $PAGERlugar de hacerlo solo al azar, a diferencia de muchas otras herramientas mal escritas. La única magia que gittiene es que si no$LESS está definida , definirá $LESSa valor FRX. Consulte github.com/git/git/blob/master/Documentation/config.txt#L766 para obtener más detalles.
Mikko Rantalainen
@WarrenP gitsimplemente proporciona una anulación GIT_PAGER que le permitirá definir un valor personalizado que se usará en lugar de PAGERcuando git necesite paginación.
Mikko Rantalainen
1
El caso más simple que corrige el comportamiento solo para git: export GIT_PAGER = cat
Stragulus
17

Otra solución para el problema de deshabilitar permanentemente el buscapersonas específicamente cuando se usa un logsubcomando:

  • solo para el repositorio actual:
    git config pager.log false

  • para su instalación de git (es decir, todos los repositorios en su máquina):
    git config --global pager.log false

Como puede adivinar, lo mismo funciona si se necesita que el buscapersonas esté encendido o apagado para algunos otros subcomandos de forma selectiva.
P.ej. para el branchsubcomando (que imprime ramas) será

git config pager.branch false


La solución propuesta es posiblemente más elegante en comparación con

  • usando git --no-pagercada vez que ejecuta cierto comando.
    Porque es muy posible que no desee escribirlo cada vez.

  • especificando git --no-pagercomo un alias para git
    Porque, muy posible, desea evitar la configuración global implícita O desea que el paginador esté habilitado en algunos casos.

  • dependen de algunas variables de entorno como PAGERo GIT_PAGER.
    Porque para hacer eso, debe asegurarse de que estén configurados en su sesión de terminal actual. Y, si desea que se establezcan en algún valor personalizado automáticamente cada vez que se crea su nueva terminal, debe modificar uno de los archivos de arranque de shell, como por ejemplo ~/.bashrc. No es un gran problema. Pero estos archivos bootstrap con frecuencia también son alterados por otras aplicaciones y contienen muchas otras cosas, no solo las que usa Git. Entonces, en teoría, es mejor especificar configuraciones relacionadas con git usando en git configlugar de ponerlas en eg ~/.bashrc.


La solución alternativa para la desactivación pagerde todos los subcomandos es especificar catcomo el git utilidad va a utilizar para paginación:

  • git config core.pager cat O
  • git config --global core.pager cat

Mi respuesta es una reformulación de la siguiente:
"¿evitar que git diff use un localizador?"
https://stackoverflow.com/a/6986231/6103242

Se hace referencia para señalar otra discusión relevante.

VladZamskoi
fuente
3

Desactive el buscapersonas para todos los comandos:

git config --global core.pager '' 
marchozaur
fuente
2

Lo canaliza a menos -F en caso de que --no-pager no funcione para usted.

git log --decorate --oneline -5 | less -F
Nick Constantine
fuente