Warum warnt git diff unter Windows, dass das Terminal nicht voll funktionsfähig ist?

111

Ich verwende msysgit 1.7.7.1 unter Windows. Bei der Verwendung wird eine Fehlermeldung angezeigt git diff. Was verursacht das? Ist in msysgit kein Diff-Tool enthalten? Was soll ich machen?

WARNUNG: Das Terminal ist nicht voll funktionsfähig

Portaljacker
quelle
1
Eine wahrscheinliche Lösung: kizzx2.com/blog/index.php/2009/01/07/…
Mr_Spock
Ok, nun, msysgit benutzt git, es ist irgendwie im Namen. Also folgte ich dem mit msys als Begriff und es funktionierte! Veröffentlichen Sie die Erklärung in einer gut formatierten Antwort, damit ich Ihnen einen Vertreter geben kann!
Portaljacker
im Powershell-Lauf: $ env: Term = "xterm"
Anton Soradoi

Antworten:

62

Für Git Bash kann dies behoben werden, indem die folgende Zeile zu ~ / .bashrc hinzugefügt wird:

export TERM=cygwin

-oder-

export TERM=msys

Das erste scheint das Original von Git für Windows zu sein, das zweite eine beliebte bekannte Form, um ebenfalls zu "heilen".

Das Problem kann verursacht werden, wenn ein anderes Programm (wie z. B. Strawberry Perl ) die TERMSystemumgebungsvariablen festlegt .

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

Manojlds
quelle
Ja, aber im Dateibaum für git ist keine solche Datei vorhanden. Die andere Antwort funktionierte und machte Sinn.
Portaljacker
1
@Portaljacker - Was meinst du gearbeitet? Schließen Sie die Git-Bash, öffnen Sie sie erneut und prüfen Sie, ob sie noch funktioniert.
Manojlds
4
Ja, in Windows ist die Einstellung der Umgebungsvariablen über set oder die GUI (erweiterte Einstellungen wie in der anderen Antwort gezeigt) der richtige Weg.
CGP
11
Diese Antwort ist unbefriedigend, da das OP nicht gesagt hat, dass er Bash verwendet, und es keine Anforderung gibt, dass Git von Bash ausgeführt werden muss. Persönlich verwende ich die Windows-Eingabeaufforderung und möchte eine Lösung, die für diese Umgebung funktioniert.
David Grayson
7
@DavidGrayson Thread necro, ich weiß, aber Sie können das gleiche in der Windows-Eingabeaufforderung tun, indem Sie verwenden setx TERM msys. SETX(im Gegensatz zu nur SET) schreibt die env-Variable in die Registrierung.
Wikipedia
184

Wenn Sie beispielsweise Probleme mit cmd.exe haben, lesen Sie die Warnung hier:

CMD.EXE ohne korrekt eingestellten TERM

Stellen Sie dann einfach Ihre Umgebungsvariablen ein und geben Sie TERM = msys an. Danach wird Ihre Variable jedes Mal, wenn Sie eine cmd.exe öffnen, korrekt festgelegt.

So legen Sie Ihre TERM-Umgebungsvariable fest

JETZT MÜSSEN SIE IHRE SHELL (CMD.EXE) NEU STARTEN. Führen Sie einfach einen neuen aus. Und von dort sollten Sie keine Probleme mehr haben. Nochmal:

CMD.EXE mit dem richtigen TERM-Satz

Teleball
quelle
Ja, das ist definitiv so. Ich bin auf Vista, und das hat es total gelöst. Danke Teleball!
J Cole Morrison
2
Irgendeine Idee, woher dieses Problem kommt oder was diese Nachricht bedeutet ?
Anthony Mastrean
7
@AnthonyMastrean bedeutet, dass das Terminal das Schreiben an verschiedene Stellen im Terminalfenster nicht unterstützt. Git diff möchte über das gesamte Fenster schreiben, z. B. den nächsten Bildschirm schreiben, ohne eine Million Backspaces zu erstellen, um den Cursor jedes Mal an die richtige Stelle zu bringen.
JWG
Da Programme nicht geändert werden, ist das eigentliche Problem nicht die Terminalunterstützung. Es ist (genau weniger) dumm von anderen Programmen, die TERM-Variablen als einen Grundbegriff definieren, wie @manojlds betont.
Albfan
2
Wenn Sie Vagrant verwenden, verursacht dieses Update Probleme mit der Bash-Shell. ZB funktioniert Nano nicht mehr und gibt den Fehler aus: 'msys': unbekannter Terminaltyp
Sirrah
16

Die obigen Antworten haben bei mir nicht vollständig funktioniert, also habe ich Folgendes getan: Hinzufügen

export TERM=msys 

zu " [githome] / etc / profile " oben, aber es wurden nur Änderungen für git bash vorgenommen. Dann habe ich hinzugefügt

@set TERM=msys

zu " [githome] /cmd/git.cmd " nach @setlocal (ich habe nur git installiert, das über die Befehlszeile ausgeführt wird). Vielleicht ist diese Entscheidung nicht wirklich gut, aber sie funktioniert für mich und es gibt keine Terminalwarnungen. (Ich benutze Git Version 1.7.10.msysgit.1).

Anatoly R.
quelle
2
Für Windows musste ich nur die Umgebungsvariable TERM auf msys setzen, was über SETX erfolgen kann.
CGP
14

Die Antwort finden Sie hier , in der der Autor der Lösung behauptet, dass:

Die Umgebungsvariable TERMwurde auf gesetztdumb

das war statt

TERM=cygwin

Sie können das in ändern

TERM=msys

das vorliegende Problem zu lösen.

Mr_Spock
quelle
Es stellt sich heraus, dass diese Antwort nur für die aktuelle Sitzung von gitbash funktioniert und in die andere Antwort geändert werden musste.
Portaljacker
6

Ich arbeite in Powershell und habe die ausführbare Git-Datei direkt auf meinem Weg.

Keine der vorgeschlagenen Antworten hat funktioniert, aber ich habe eine Lösung gefunden, die für mich funktioniert.

Ich habe meinem Powershell-Profil eine Zeile hinzugefügt:

$env:TERM="msys"

Was das Problem für mich behoben hat.

John Weldon
quelle
Mit git Version 1.7.11.msysgit.1 scheint dies für mich kein Problem mehr zu sein. Ich konnte $ env: TERM = "msys" entfernen und die Farberweiterung in mercurial ohne Probleme wieder aktivieren.
John Weldon
Der Konflikt mit anderen Anwendungen, die andere Terminals verwenden, ist der Grund, warum Sie der Antwort von manojlds folgen und TERM in Git Bashs eigenem .bashrc festlegen sollten, anstatt die Umgebungsvariable hier zu ändern, was sich auf alle Programme auswirkt.
JWG
1
@jwg guter Punkt, aber ich benutze git die ganze Zeit und ich bevorzuge Powershell gegenüber Bash, also war es für mich übertrieben, Bash ausführen zu müssen, um die Farbausgabe zu erhalten.
John Weldon
Ich habe dies zu meiner cmder profile..ps1-Datei anstelle meines allgemeinen Powershell-Profils hinzugefügt.
gerrard00
6

In meinem Fall stellte sich heraus, dass eine schnelle und schmutzige Lösung darin bestand, die --no-pagerOption zu verwenden.

Standardmäßig verwenden einige Git-Befehle (wie log) einen Pager, lesswenn sie erwarten, dass die Ausgabe lang ist. Pager erfordern beispielsweise das Scrollen von Text mit den Pfeiltasten nach oben und unten, was manchmal nicht funktioniert, wenn die Annahmen darüber, auf welcher Art von Terminal Sie sich befinden, falsch sind (dies bedeutet "nicht voll funktionsfähig").

Wenn Sie im Voraus wissen, dass Ihre Ausgabe kurz sein wird, oder wenn Sie nur möchten, dass die Ausgabe an das Terminal ausgegeben wird und das Scrollen Ihrem Terminalprogramm überlassen bleibt, können Sie dies überschreiben und überhaupt keinen Pager verwenden, z.

git --no-pager log
Felix
quelle
0

Falls jemand diese Start-Bash von Git Extensions erhält, überprüfen Sie die Einstellung für Path to linux tools.... Meins war eingestellt auf C:\cygwin. Ändern Sie es, um C:\Program Files (x86)\Git\bin\es für mich zu beheben. Ich musste die TERM-Variable nicht festlegen, um Bash auf diese Weise zu starten.

Lehm
quelle