¿Por qué git diff en Windows advierte que el “terminal no es completamente funcional”?

111

Estoy usando msysgit 1.7.7.1 en Windows. Recibo un error al usar git diff. ¿Qué está causando esto? ¿No se incluye ninguna herramienta de diferencias en msysgit? ¿Qué tengo que hacer?

ADVERTENCIA: el terminal no es completamente funcional

Portaljacker
fuente
1
Una solución probable: kizzx2.com/blog/index.php/2009/01/07/…
Mr_Spock
Ok, bueno, msysgit usa git, es como en el nombre. ¡Así que seguí con msys como término y funcionó! Publique la explicación en una respuesta bien formateada para que pueda otorgarle un representante.
Portaljacker
en powershell run: $ env: Term = "xterm"
Anton Soradoi

Respuestas:

62

Para Git Bash, esto se puede solucionar agregando la siguiente línea a ~ / .bashrc:

export TERM=cygwin

-o-

export TERM=msys

El primero parece ser el original de git para windows, el segundo es una forma popular conocida de "curar" también.

El problema puede deberse a que algún otro programa (como por ejemplo Strawberry Perl ) establece las TERMvariables de entorno del sistema.

http://code.google.com/p/msysgit/issues/detail?id=184

manojlds
fuente
Sí, pero no existe tal archivo en el árbol de archivos de git. La otra respuesta funcionó y tuvo sentido.
Portaljacker
1
@Portaljacker - ¿Qué quieres decir con trabajado? ¿Cerrar el git bash, abrir de nuevo y ver si todavía funciona?
manojlds
4
Sí, en Windows, la configuración de la variable de entorno a través de set o la GUI (configuración avanzada como se muestra en la otra respuesta) es el camino a seguir.
cgp
11
Esta respuesta no es satisfactoria porque el OP no dijo que estaba usando bash y no hay ningún requisito de que git deba ejecutarse desde bash. Personalmente, uso el símbolo del sistema de Windows y quiero una solución que funcione para ese entorno.
David Grayson
7
@DavidGrayson Thread necro, lo sé, pero puede hacer lo mismo en el símbolo del sistema de Windows usando setx TERM msys. SETX(a diferencia de SET) escribe la variable env en el registro.
rossipedia
184

Si tiene problemas con cmd.exe, por ejemplo, consulte la advertencia aquí:

CMD.EXE sin el TERM configurado correctamente

Luego, simplemente configure sus variables de entorno e incluya TERM = msys. Después de eso, cada vez que abra un cmd.exe, su variable se configurará correctamente.

Cómo configurar su variable de entorno TERM

AHORA DEBE REINICIAR SU SHELL (CMD.EXE). Ejecute uno nuevo. Y a partir de ahí, no debería tener más problemas. De nuevo:

CMD.EXE con el TERMINOL correcto establecido

teleball
fuente
Sí, definitivamente lo es. Estoy en vista, y eso lo resolvió totalmente. ¡Gracias teleball!
J Cole Morrison
2
¿Alguna idea de dónde viene este problema o qué significa este mensaje ?
Anthony Mastrean
7
@AnthonyMastrean significa que el terminal no admite la escritura en diferentes ubicaciones en la ventana del terminal. Git diff quiere escribir en toda la ventana, por ejemplo, escribir la siguiente pantalla completa, sin hacer un millón de retrocesos para colocar el cursor en el lugar correcto cada vez.
jwg
Dado que los programas no se cambian, el problema real no es el soporte de terminal, es git (exactamente menos) que otro programa haya sido tonto que define la variable TERM como un término básico, como señala @manojlds.
albfan
2
Si está utilizando Vagrant, esta solución causa problemas con el shell bash. Por ejemplo, nano ya no funcionará, dando error: 'msys': tipo de terminal desconocido
Sirrah
16

Las respuestas anteriores no me funcionaron completamente, así que lo hice: Agregar

export TERM=msys 

a " [githome] / etc / profile " en la parte superior, pero solo hizo cambios para git bash. Entonces agregué

@set TERM=msys

a " [githome] /cmd/git.cmd " después de @setlocal (instalé solo git run desde la línea de comando). Puede que esta decisión no sea realmente buena, pero funciona para mí y no hay advertencias de terminal. (Yo uso la versión 1.7.10.msysgit.1 de git).

Anatoly R
fuente
2
Para Windows, solo necesitaba establecer la variable de entorno TERM en msys, lo que se puede hacer a través de SETX.
cgp
14

La respuesta se puede encontrar aquí , en la que el autor de la solución afirma que:

la variable de entorno TERMse estableció endumb

eso fue en lugar de

TERM=cygwin

Puedes cambiar eso a

TERM=msys

para resolver el problema en cuestión.

Mr_Spock
fuente
Resulta que esta respuesta solo funciona para la sesión actual de gitbash, tuve que cambiarla a la otra respuesta.
Portaljacker
6

Trabajo en powershell y tengo el ejecutable git directamente en mi camino.

Ninguna de las respuestas sugeridas funcionó, pero encontré una solución que funciona para mí.

Agregué una línea en mi perfil de powershell:

$env:TERM="msys"

Lo que me solucionó el problema.

John Weldon
fuente
Esto ya no parece ser un problema para mí usando git versión 1.7.11.msysgit.1. Pude eliminar el $ env: TERM = "msys" y volver a habilitar la extensión de color en mercurial sin problemas.
John Weldon
El conflicto con otras aplicaciones que usan terminales diferentes es la razón por la que debe seguir la respuesta de manojlds y establecer TERM en el propio .bashrc de Git Bash en lugar de cambiar la variable de entorno aquí, lo que afectará a todos los programas.
jwg
1
@jwg buen punto, pero uso git todo el tiempo y prefiero powershell a bash, así que tener que ejecutar bash solo para obtener la salida de color fue una exageración para mí.
John Weldon
Agregué esto a mi archivo cmder profile..ps1 en lugar de mi perfil general de powershell.
gerrard00
6

Una solución rápida y sucia en mi caso resultó ser usar la --no-pageropción.

De forma predeterminada, algunos comandos de git (como log) usarán un paginador como lesssi esperan que la salida sea larga. Los buscapersonas requieren cosas como desplazar el texto hacia arriba y hacia abajo con las teclas de flecha, lo que a veces no funciona si las suposiciones sobre el tipo de terminal en el que se encuentra son incorrectas (esto es lo que significa "no completamente funcional").

Si sabe de antemano que su salida será corta, o simplemente quiere que descargue la salida en la terminal y deje el desplazamiento hasta su programa de terminal, puede anular esto y no usar un buscapersonas, por ejemplo:

git --no-pager log
Felix
fuente
0

En caso de que alguien obtenga este bash de lanzamiento desde Git Extensions, verifique la configuración Path to linux tools.... El mío estaba configurado para C:\cygwin. Cambiarlo para C:\Program Files (x86)\Git\bin\arreglarlo para mí. No tuve que configurar la variable TERM para iniciar bash de esta manera.

Arcilla
fuente