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ć?
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.
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:
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.
TERAZ MUSISZ PONOWNIE URUCHOMIĆ MUSZĘ (CMD.EXE). Po prostu uruchom nowy. Od tego momentu nie powinieneś mieć więcej problemów. Jeszcze raz:
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).
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:
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.
Odpowiedzi:
W przypadku Git Bash można to naprawić, dodając następujący wiersz do ~ / .bashrc:
-lub-
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
TERM
zmienne środowiskowe systemu.http://code.google.com/p/msysgit/issues/detail?id=184
źródło
setx TERM msys
.SETX
(w przeciwieństwie do samego SET) zapisuje zmienną env do rejestru.Jeśli na przykład masz problemy z cmd.exe, zobacz ostrzeżenie tutaj:
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.
TERAZ MUSISZ PONOWNIE URUCHOMIĆ MUSZĘ (CMD.EXE). Po prostu uruchom nowy. Od tego momentu nie powinieneś mieć więcej problemów. Jeszcze raz:
źródło
Powyższe odpowiedzi nie w pełni działały dla mnie, więc zrobiłem: Dodaj
do " [githome] / etc / profile " u góry, ale wprowadził zmiany tylko dla git bash. Potem dodałem
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).
źródło
Odpowiedź można znaleźć tutaj , w której autor rozwiązania twierdzi, że:
to było zamiast
Możesz to zmienić na
aby rozwiązać problem.
źródło
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:
Który rozwiązał problem.
źródło
Szybkim i brudnym rozwiązaniem w moim przypadku okazało się skorzystanie z
--no-pager
opcji.Domyślnie niektóre polecenia git (takie jak
log
) będą używać pagera, tak jakless
wtedy, 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:
źródło
W przypadku, gdy ktoś otrzyma ten uruchamiający bash z rozszerzeń Git, sprawdź ustawienie
Path to linux tools...
. Mój był ustawiony naC:\cygwin
. Zmieniam to, żebyC:\Program Files (x86)\Git\bin\
naprawić to dla mnie. Nie musiałem ustawiać zmiennej TERM, aby uruchomić bash w ten sposób.źródło