2010-11-19 20 views
21

Generalmente me gusta el uso del pager en git, pero para el git stash el pager me molesta. Cuando llamo al git stash list, no quiero que se muestren las tres líneas de salida en el buscapersonas - me obliga a presionar q solo para hacer que la salida no esté disponible nuevamente al escribir el siguiente comando git stash pop.Apagar el pager en git para el comando stash only

Una solución sería utilizar

git --no-pager stash list 

pero eso es de escribir mucho (soy perezoso). Tras la man page of git config, probé

git config --global pager.stash false 

pero esto no parece hacer lo que dice la documentación (en realidad, yo no he notado ningún efecto). Luego probé

git config --global alias.stash "--no-pager stash" 

de nuevo sin ningún efecto notorio.

La configuración se bien informado, por ejemplo

git config pager.stash 
false 

Simplemente no tiene ningún efecto. ¿Qué me estoy perdiendo? ¿Y cómo puedo lograr que git stash no use el buscapersonas?

+0

¿Tiene alguna otra configuración relacionada con el localizador? Stash no usa el buscapersonas para mí. – Cascabel

+0

Golpee eso: el subcomando list hace paginación e ignora la configuración. – Cascabel

+1

Ver mi respuesta a continuación: 'git config --global pager.stash false' no funcionaba era un error corregido en git 1.7.7.3 y posterior. – cbowns

Respuesta

9

Parece un escondite, y cualquier otro comando no incorporado (escrito como un script de shell, en lugar de en C) se pierde en el paso de configuración del paginador. Envié una nota a la lista de correo git preguntando sobre esto; parece que es un problema conocido, pero no totalmente trivial de arreglar.

La razón principal por la que no ve ningún efecto en su alias es que git ignora silenciosamente los alias de los comandos integrados; la idea es que nunca quieras hacer que un comando sea inaccesible. Para que el alias tenga la posibilidad de ejecutarse, debe nombrarlo de otra manera que no sea stash.

Sin embargo, creo que los alias simples no tienen permitido afectar el entorno en el que se ejecuta un comando git, que generalmente incluye las opciones pasadas al git. Si utilizo un alias como la suya:

git config alias.foo --no-pager stash 
git foo 
fatal: alias 'foo' changes environment variables 

Si quieres hacer eso correctamente, usted tendría que usar !git --no-pager stash, por lo que va a generar un subnivel y vuelva a invocar git.

Otra corrección temporal, ya que es un script de shell, sería editar directamente libexec/git-core/git-stash. Simplemente busque la función list_stash y agregue la opción --no-pager a su llamada al git log, o para cubrir toda la secuencia de comandos, establezca en la parte superior.

+0

Gracias por la información y por mencionar esto en la lista de correo git (también leí la respuesta a su correo allí). En cuanto al alias: también probé un nombre diferente al de 'alijo ', pero el efecto fue el mismo. Extrañamente, no recibí un mensaje de error (versión 1.7.2.3), así que pensé que el nombre no era el motivo. Voy a parchear el script por ahora. –

+1

@Sven: ¿Tiene realmente más de una pantalla de depósitos para listar? ¿O su buscapersonas no sale después de menos de una pantalla de salida? – Cascabel

+0

@Sven: Y no estoy seguro de por qué no obtienes ese error. Ese control se agregó hace mucho, mucho tiempo (v1.5.3). Sin embargo, el alias subshell ('! ...') debería funcionar bien y evitar tener que editar git. – Cascabel

23

A partir de 1.7.7.3, git config --global pager.stash false logra esto.

7

alternativa, se puede configurar less a la salida si no es para menos de una pantalla de salida:

export LESS='-F' 

O, más detallados:

export LESS='--quit-if-one-screen' 

Si tiene colores en su salida de git, que' Probablemente también quiera pasar la bandera -r:

export LESS='-F -r' 
+0

Esta solución ya está enterrada en los comentarios a la respuesta de Jefromi (de alguna manera). Sin embargo, es bueno tenerlo en una respuesta propia. –

+3

No funciona aquí (xterm en pts) porque después de 'less' quit, no queda nada de menos display, redibuja las indicaciones anteriores. Pero funciona con el término "linux" en tty1. – lolesque

+0

Sí, en algunos sistemas/terminales la salida desaparece porque todo va a "pantalla alternativa" y se cambia de inmediato :-(Agregar '--no-init' podría ayudar. –

Cuestiones relacionadas