Pourquoi git diff sous Windows avertit-il que le «terminal n'est pas entièrement fonctionnel»?

111

J'utilise msysgit 1.7.7.1 sur Windows. J'obtiens une erreur lors de l'utilisation git diff. Qu'est-ce qui cause cela? N'y a-t-il pas d'outil de différence inclus dans msysgit? Que devrais-je faire?

AVERTISSEMENT: le terminal n'est pas entièrement fonctionnel

Portailjacker
la source
1
Une solution probable: kizzx2.com/blog/index.php/2009/01/07/…
Mr_Spock
Ok, eh bien msysgit utilise git, c'est en quelque sorte dans le nom. J'ai donc suivi cela avec msys comme terme et cela a fonctionné! Postez l'explication dans une réponse bien formatée afin que je puisse vous attribuer un représentant!
Portaljacker
dans PowerShell: $ env: Term = "xterm"
Anton Soradoi

Réponses:

62

Pour Git Bash, cela peut être corrigé en ajoutant la ligne suivante à ~ / .bashrc:

export TERM=cygwin

-ou-

export TERM=msys

Le premier semble être l'original de git pour windows, le second une forme connue pour «guérir» également.

Le problème peut être causé si un autre programme (comme par exemple Strawberry Perl ) définit les TERMvariables d'environnement système.

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

manojlds
la source
Oui, mais aucun fichier de ce type n'existe dans l'arborescence de fichiers pour git. L'autre réponse fonctionnait et avait du sens.
Portaljacker
1
@Portaljacker - Que voulez-vous dire a travaillé? Fermer le git bash, ouvrir à nouveau et voir si cela fonctionne toujours?
manojlds
4
Oui, dans Windows, définir la variable d'environnement via set ou l'interface graphique (paramètres avancés comme indiqué dans l'autre réponse) est la voie à suivre.
cgp
11
Cette réponse n'est pas satisfaisante car l'OP n'a pas dit qu'il utilisait bash et il n'est pas nécessaire que git soit exécuté à partir de bash. Personnellement, j'utilise l'invite de commande Windows et je veux une solution qui fonctionne pour cet environnement.
David Grayson
7
@DavidGrayson Thread necro, je sais, mais vous pouvez faire la même chose dans l'invite de commande Windows en utilisant setx TERM msys. SETX(par opposition à juste SET) écrit la variable env dans le registre.
rossipedia
184

Si vous rencontrez des problèmes dans cmd.exe, par exemple, consultez l'avertissement ici:

CMD.EXE sans le TERM correctement défini

Ensuite, définissez simplement vos variables d'environnement et incluez TERM = msys. Après cela, chaque fois que vous ouvrez un cmd.exe, votre variable sera définie correctement.

Comment définir votre variable d'environnement TERM

MAINTENANT, VOUS DEVEZ REDÉMARRER VOTRE SHELL (CMD.EXE). Il suffit d'en lancer un nouveau. Et à partir de là, vous ne devriez plus avoir de problèmes. Encore:

CMD.EXE avec le bon ensemble de TERM

téléball
la source
Ouais, c'est définitivement. Je suis sur Vista, et cela a totalement résolu le problème. Merci teleball!
J Cole Morrison
2
Une idée d'où vient ce problème ou ce que signifie ce message ?
Anthony Mastrean
7
@AnthonyMastrean cela signifie que le terminal ne prend pas en charge l'écriture à différents endroits dans la fenêtre du terminal. Git diff veut écrire partout dans la fenêtre, par exemple pour écrire le prochain écran, sans faire un million d'espaces arrière pour placer le curseur au bon endroit à chaque fois.
jwg
Puisque les programmes ne sont pas modifiés, le vrai problème n'est pas le support du terminal, c'est git (exactement moins) qui a été stupide par un autre programme qui définit la variable TERM comme un terme de base, comme le souligne @manojlds.
albfan
2
Si vous utilisez Vagrant, ce correctif pose des problèmes avec le shell bash. Par exemple, nano ne fonctionnera plus, donnant l'erreur: 'msys': type de terminal inconnu
Sirrah
16

Les réponses ci-dessus ne fonctionnaient pas entièrement pour moi, alors j'ai fait: Ajouter

export TERM=msys 

à " [githome] / etc / profile " en haut mais il n'a fait des changements que pour git bash. Puis j'ai ajouté

@set TERM=msys

à " [githome] /cmd/git.cmd " après @setlocal (j'ai installé uniquement git run à partir de la ligne de commande). Cette décision n'est peut-être pas vraiment bonne, mais cela fonctionne pour moi et il n'y a pas d'avertissements terminaux. (J'utilise la version 1.7.10.msysgit.1 de git).

Anatoly R
la source
2
Pour Windows, j'avais juste besoin de définir la variable d'environnement TERM sur msys, ce qui peut être fait via SETX.
cgp
14

La réponse peut être trouvée ici , dans laquelle l'auteur de la solution affirme que:

la variable d'environnement a TERMété définie surdumb

c'était au lieu de

TERM=cygwin

Vous pouvez changer cela en

TERM=msys

pour résoudre le problème à résoudre.

Mr_Spock
la source
Il s'avère que cette réponse ne fonctionne que pour la session actuelle de gitbash, a dû la changer pour l'autre réponse.
Portaljacker
6

Je travaille sous PowerShell et j'ai l'exécutable git directement dans mon chemin.

Aucune des réponses suggérées n'a fonctionné, mais j'ai trouvé une solution qui fonctionne pour moi.

J'ai ajouté une ligne dans mon profil PowerShell:

$env:TERM="msys"

Ce qui a résolu le problème pour moi.

John Weldon
la source
Cela ne semble plus être un problème pour moi en utilisant la version 1.7.11.msysgit.1 de git. J'ai pu supprimer le $ env: TERM = "msys" et réactiver l'extension de couleur dans mercurial sans problème.
John Weldon
Le conflit avec d'autres applications qui utilisent des terminaux différents est la raison pour laquelle vous devriez suivre la réponse de manojlds et définir TERM dans le propre .bashrc de Git Bash plutôt que de changer la variable d'environnement ici, ce qui affectera tous les programmes.
jwg
1
@jwg bon point, mais j'utilise git tout le temps et je préfère powershell à bash, donc devoir exécuter bash juste pour obtenir une sortie couleur était excessif pour moi.
John Weldon
J'ai ajouté ceci à mon fichier cmder profile..ps1 au lieu de mon profil PowerShell général.
gerrard00
6

Une solution rapide et sale dans mon cas s'est avérée être d'utiliser l' --no-pageroption.

Par défaut, certaines commandes git (comme log) utiliseront un pager comme lesssi elles s'attendent à ce que la sortie soit longue. Les téléavertisseurs nécessitent des choses comme faire défiler le texte de haut en bas avec les touches fléchées, ce qui parfois ne fonctionne pas si les hypothèses sur le type de terminal sur lequel vous vous trouvez sont fausses (c'est ce que signifie «pas entièrement fonctionnel»).

Si vous savez à l'avance que votre sortie sera courte, ou si vous voulez simplement qu'elle vienne la sortie sur le terminal et laisse le défilement jusqu'à votre programme de terminal, vous pouvez remplacer cela et ne pas utiliser du tout un pager, par exemple:

git --no-pager log
Félix
la source
0

Au cas où quelqu'un obtiendrait cette bash de lancement depuis les extensions Git, vérifiez le paramètre pour Path to linux tools.... Le mien était réglé C:\cygwin. Le changer pour le C:\Program Files (x86)\Git\bin\réparer pour moi. Je n'ai pas eu à définir la variable TERM pour lancer bash de cette façon.

Argile
la source