¿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
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.
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í:
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.
AHORA DEBE REINICIAR SU SHELL (CMD.EXE). Ejecute uno nuevo. Y a partir de ahí, no debería tener más problemas. De nuevo:
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).
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:
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.
Respuestas:
Para Git Bash, esto se puede solucionar agregando la siguiente línea a ~ / .bashrc:
-o-
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
TERM
variables de entorno del sistema.http://code.google.com/p/msysgit/issues/detail?id=184
fuente
setx TERM msys
.SETX
(a diferencia de SET) escribe la variable env en el registro.Si tiene problemas con cmd.exe, por ejemplo, consulte la advertencia aquí:
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.
AHORA DEBE REINICIAR SU SHELL (CMD.EXE). Ejecute uno nuevo. Y a partir de ahí, no debería tener más problemas. De nuevo:
fuente
Las respuestas anteriores no me funcionaron completamente, así que lo hice: Agregar
a " [githome] / etc / profile " en la parte superior, pero solo hizo cambios para git bash. Entonces agregué
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).
fuente
La respuesta se puede encontrar aquí , en la que el autor de la solución afirma que:
eso fue en lugar de
Puedes cambiar eso a
para resolver el problema en cuestión.
fuente
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:
Lo que me solucionó el problema.
fuente
Una solución rápida y sucia en mi caso resultó ser usar la
--no-pager
opción.De forma predeterminada, algunos comandos de git (como
log
) usarán un paginador comoless
si 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:
fuente
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 paraC:\cygwin
. Cambiarlo paraC:\Program Files (x86)\Git\bin\
arreglarlo para mí. No tuve que configurar la variable TERM para iniciar bash de esta manera.fuente