¿Por qué git ejecuta menos innecesariamente?

22

Cuando ejecuto git branch(desde bash o csh), canaliza automáticamente la salida less. Sin embargo, con solo unas pocas ramas en el repositorio, esto es más que innecesario, es molesto, ya que la lista de ramas desaparece una vez que dejo de fumar.

Comprobar el ~/.gitconfigarchivo y los .git/configarchivos locales no encuentra nada sobre un localizador o cualquier otra cosa que pueda causar esto. De lo contrario, nada de lo que he encontrado en las búsquedas web ha sido útil o prometedor.

¿Por qué sucede esto, y qué (si hay algo) que puedo hacer para lesscorrer cuando sea necesario (por ejemplo, cuando hago un git logcuando hay mucha historia) pero no de otra manera (como un git branchcon solo 2 o 3 ramas)?

GreenMatt
fuente
44
En general, git no sabe la cantidad de salida que habrá de cualquier comando, por lo que envía todo de forma predeterminada a través de un localizador, que probablemente será menor.
Ícaro
66
Lo primero que debe hacer en una nueva instalación de -nix es poner export LESS=-Xen el .profile. Esto evita que se "limpie" la pantalla. Me odio a entender que la fijación de normas borra la pantalla porque a menudo la necesidad de cortar y pegar material o utilizarlo como una referencia.
Peter - Restablece a Mónica el
3
@Peter Para ser claro (sin juego de palabras), solo las personas que no desean el comportamiento de limpieza de pantalla deben hacerlo.
David Z
@icarus: Eso parece lógico. Sin embargo, el comportamiento mío cambió recientemente. No estoy seguro de por qué, probablemente un cambio en alguna variable de entorno forzada por la gente de seguridad corporativa "en las alturas" a quien no parece importarle lo difícil que es hacer el trabajo de todos los demás. De todos modos, git de repente pasó de lo que consideraba un comportamiento sensible a ejecutar salidas de una sola línea a través de menos de tal manera que la salida se perdió cuando me detuve menos.
GreenMatt
Si el comportamiento cambió recientemente, al menos es posible que se haya agregado una configuración de la variable MENOS a los archivos de inicio del shell de todo el sistema, por ejemplo / etc / profile, /etc/profile.d/*, /etc/bash.bashrc, ¿Tienes esta variable en tu entorno?
Ícaro

Respuestas:

35

Puede configurar lo siguiente:

git config --global core.pager 'less -FRX'

Esto asegurará que lessla voluntad

  • Salga si se puede mostrar todo el archivo en la primera pantalla ( F)
  • Salida de los caracteres de control sin formato para el formato del terminal ( R)
  • Cortar líneas largas ( S)
  • No envíe las cadenas init / de-init al terminal; evita borrar la pantalla al salir ( X)

Editar: se eliminó la Sopción basada en el comentario de Peter A. Scheider

QIS
fuente
77
y omita el --globalsi desea que solo se aplique al repositorio actual.
mosvy
8
Establecer la variable de entorno LESSen -FR, agregar X y S al gusto es otra forma.
Ícaro
11
Lo más probable es que el OP encuentre ese comportamiento molesto en general; Supongo que uno podría establecer la variable de entorno export PAGER='less -FRSX'y git lo honraría (en ausencia de una configuración específica de git). Por cierto, -Ses peligroso porque descarta silenciosamente la salida.
Peter - Restablece a Mónica el
4

Aquí hay algunas respuestas excelentes para lessel comportamiento de afinación , pero dado que mis dedos de barba gris están acostumbrados a escribir |morecuando lo quiero, y dado que todavía estoy más en sintonía con mercurial que con git, estoy interesado en

git config --global core.pager cat
dgc
fuente
3
La página del manual para git-configindica que el valor de core.pagerestá destinado a ser interpretado por el shell. Cuando lo configura no, intenta ejecutar el comando no, que probablemente no existe, luego recurre simplemente a la salida del contenido. Aún verá un mensaje de error en la cabeza. Lo que probablemente quieras hacer es configurarlo en su catlugar.
QIS
1
Esa es una buena información, pero lo que me gusta es que no ejecuta nada . El cates inútil, y no confío particularmente en que los mantenedores de utilidades de Linux no cambien lo que hace cat (véase la lsdebacle de los archivos citados ). Tal vez debería usar "no nunca" en su lugar. Es menos probable que dicho programa exista.
dgc
77
Ajuste core.pagera la cadena vacía ( git config core.pager '') o catse no ejecutar nada en absoluto. Puede resolverlo usted mismo si no me cree ;-) No hay ninguna razón para configurarlo como un comando ficticio como no.
Mosvy
¡Muchas gracias! No tenía idea de que la cadena vacía no causaría la ejecución del comando. En cuanto a cat, ¿está diciendo que git tiene un caso especial para esa cadena en el código del buscapersonas, es decir, que cates efectivamente un sinónimo de "nulo"? Esperaría que se ejecute cat.
dgc
De hecho, este parece ser el caso. Huevos Pero también es bueno: siempre estoy buscando más formas de justificar mi disgusto por git.
Dgc