Dlaczego git diff w systemie Windows ostrzega, że ​​„terminal nie jest w pełni funkcjonalny”?

111

Używam msysgit 1.7.7.1 na Windows. Podczas używania programu pojawia się błąd git diff. Co jest tego przyczyną? Czy w msysgit nie ma narzędzia porównywania? Co powinienem zrobić?

UWAGA: terminal nie jest w pełni funkcjonalny

Portaljacker
źródło
1
Prawdopodobne rozwiązanie: kizzx2.com/blog/index.php/2009/01/07/…
Mr_Spock
Ok, cóż, msysgit używa git, jest w nazwie. Więc poszedłem za tym z msys jako terminem i zadziałało! Opublikuj wyjaśnienie w dobrze sformatowanej odpowiedzi, abym mógł przyznać Ci przedstawiciela!
Portaljacker
w programie PowerShell uruchom: $ env: Term = "xterm"
Anton Soradoi

Odpowiedzi:

62

W przypadku Git Bash można to naprawić, dodając następujący wiersz do ~ / .bashrc:

export TERM=cygwin

-lub-

export TERM=msys

Pierwsza wydaje się być oryginalna przez git for Windows, druga jest popularną znaną formą „leczenia”.

Problem może być spowodowany tym, że inny program (na przykład Strawberry Perl ) ustawia TERMzmienne środowiskowe systemu.

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

manojlds
źródło
Tak, ale taki plik nie istnieje w drzewie plików dla git. Druga odpowiedź zadziałała i miała sens.
Portaljacker
1
@Portaljacker - Co masz na myśli, pracując? Zamknij git bash, otwórz ponownie i zobacz, czy nadal działa?
manojlds
4
Tak, w systemie Windows ustawienie zmiennej środowiskowej za pomocą zestawu lub GUI (ustawienia zaawansowane, jak pokazano w drugiej odpowiedzi) jest drogą do zrobienia.
cgp,
11
Ta odpowiedź jest niezadowalająca, ponieważ OP nie powiedział, że używa basha i nie ma wymogu, aby git musiał być uruchamiany z basha. Osobiście korzystam z wiersza polecenia systemu Windows i chcę rozwiązania, które działa w tym środowisku.
David Grayson
7
@DavidGrayson Thread necro, wiem, ale możesz zrobić to samo w wierszu polecenia systemu Windows, używając setx TERM msys. SETX(w przeciwieństwie do samego SET) zapisuje zmienną env do rejestru.
rossipedia
184

Jeśli na przykład masz problemy z cmd.exe, zobacz ostrzeżenie tutaj:

CMD.EXE bez poprawnie ustawionego TERM

Następnie po prostu ustaw zmienne środowiskowe i dołącz TERM = msys. Następnie za każdym razem, gdy otworzysz cmd.exe, zmienna zostanie ustawiona poprawnie.

Jak ustawić zmienną środowiskową TERM

TERAZ MUSISZ PONOWNIE URUCHOMIĆ MUSZĘ (CMD.EXE). Po prostu uruchom nowy. Od tego momentu nie powinieneś mieć więcej problemów. Jeszcze raz:

CMD.EXE z poprawnym ustawieniem TERM

teleball
źródło
Tak, to zdecydowanie jest. Jestem na Vista i to całkowicie rozwiązało problem. Dzięki teleball!
J Cole Morrison,
2
Masz jakiś pomysł, skąd pochodzi ten problem lub co oznacza ta wiadomość ?
Anthony Mastrean
7
@AnthonyMastrean oznacza to, że terminal nie obsługuje zapisu w różnych lokalizacjach w oknie terminala. Git diff chce pisać po całym oknie, np. Aby napisać następny ekran, bez robienia miliona wstecz, aby za każdym razem umieścić kursor we właściwym miejscu.
jwg,
Ponieważ programy nie są zmieniane, prawdziwym problemem nie jest obsługa terminala, jest to git (dokładnie mniej) głupie przez inny program, który definiuje zmienną TERM jako podstawowy termin, jak wskazuje @manojlds.
albfan
2
Jeśli używasz Vagrant, ta poprawka powoduje problemy z powłoką bash. Np. Nano nie będzie już działać, wyświetlając błąd: „msys”: nieznany typ terminala
Sirrah
16

Powyższe odpowiedzi nie w pełni działały dla mnie, więc zrobiłem: Dodaj

export TERM=msys 

do " [githome] / etc / profile " u góry, ale wprowadził zmiany tylko dla git bash. Potem dodałem

@set TERM=msys

do " [githome] /cmd/git.cmd " po @setlocal (zainstalowałem tylko git run z linii poleceń). Może ta decyzja nie jest naprawdę dobra, ale działa dla mnie i nie ma żadnych ostrzeżeń terminalowych. (Używam git w wersji 1.7.10.msysgit.1).

Anatolij R.
źródło
2
W przypadku Windows potrzebowałem tylko ustawić zmienną środowiskową TERM na msys, co można zrobić za pomocą SETX.
cgp,
14

Odpowiedź można znaleźć tutaj , w której autor rozwiązania twierdzi, że:

zmienna środowiskowa TERMzostała ustawiona nadumb

to było zamiast

TERM=cygwin

Możesz to zmienić na

TERM=msys

aby rozwiązać problem.

Mr_Spock
źródło
Okazuje się, że ta odpowiedź działa tylko dla bieżącej sesji gitbash, musiałem ją zmienić na inną odpowiedź.
Portaljacker
6

Pracuję w PowerShell i mam plik wykonywalny git bezpośrednio na mojej ścieżce.

Żadna z sugerowanych odpowiedzi nie zadziałała, ale znalazłem rozwiązanie, które działa dla mnie.

Dodałem wiersz w moim profilu PowerShell:

$env:TERM="msys"

Który rozwiązał problem.

John Weldon
źródło
Wydaje się, że nie stanowi to już dla mnie problemu, używając git w wersji 1.7.11.msysgit.1 Udało mi się bez problemu usunąć $ env: TERM = "msys" i ponownie włączyć rozszerzenie kolorów w Mercurial.
John Weldon
Konflikt z innymi aplikacjami, które używają różnych terminali, jest powodem, dla którego powinieneś postępować zgodnie z odpowiedzią manojlds i ustawić TERM we własnym .bashrc Git Bash zamiast zmieniać zmienną środowiskową tutaj, co wpłynie na wszystkie programy.
jwg,
1
@jwg to dobra uwaga, ale cały czas używam git i wolę powershell od bash, więc konieczność uruchamiania basha tylko po to, aby uzyskać kolorowe wydruki, była dla mnie przesadą.
John Weldon,
Dodałem to do mojego profilu cmder..ps1 zamiast mojego ogólnego profilu PowerShell.
gerrard00,
6

Szybkim i brudnym rozwiązaniem w moim przypadku okazało się skorzystanie z --no-pageropcji.

Domyślnie niektóre polecenia git (takie jak log) będą używać pagera, tak jak lesswtedy, gdy oczekują, że dane wyjściowe będą długie. Pagery wymagają rzeczy takich jak przewijanie tekstu w górę iw dół za pomocą klawiszy strzałek, co czasami nie działa, jeśli założenia dotyczące typu terminala są błędne (to właśnie oznacza „nie w pełni funkcjonalny”).

Jeśli wiesz z wyprzedzeniem, że twoje dane wyjściowe będą krótkie, lub po prostu chcesz, aby zrzuciło wyjście do terminala i pozostawiło przewijanie do twojego programu terminala, możesz to nadpisać i w ogóle nie używać pagera, np:

git --no-pager log
Felix
źródło
0

W przypadku, gdy ktoś otrzyma ten uruchamiający bash z rozszerzeń Git, sprawdź ustawienie Path to linux tools.... Mój był ustawiony na C:\cygwin. Zmieniam to, żeby C:\Program Files (x86)\Git\bin\naprawić to dla mnie. Nie musiałem ustawiać zmiennej TERM, aby uruchomić bash w ten sposób.

Glina
źródło