Tại sao git diff trên Windows cảnh báo rằng "thiết bị đầu cuối không hoạt động đầy đủ"?


111

Tôi đang sử dụng msysgit 1.7.7.1 trên Windows. Tôi gặp lỗi khi sử dụng git diff. Điều gì gây ra điều này? Không có công cụ khác biệt nào được bao gồm trong msysgit? Tôi nên làm gì?

CẢNH BÁO: thiết bị đầu cuối không hoạt động đầy đủ


1
Một giải pháp có thể xảy ra: kizzx2.com/blog/index.php/2009/01/07/...
Mr_Spock

Ok, msysgit sử dụng git, nó giống như trong tên. Vì vậy, tôi đã làm theo điều đó với msys như thuật ngữ và nó đã hoạt động! Đăng giải thích ở một câu trả lời được định dạng tốt để tôi có thể trao cho bạn một số đại diện!
Portaljacker

trong quyền hạn chạy: $ env: Term = "xterm"
Anton Soradoi

Câu trả lời:


62

Đối với Git Bash, điều này có thể được khắc phục bằng cách thêm dòng sau vào ~ / .bashrc:

export TERM=cygwin

-hoặc là-

export TERM=msys

Hình thức đầu tiên dường như là bản gốc của git cho windows, hình thức thứ hai cũng là một hình thức phổ biến được biết đến để "chữa lành".

Sự cố có thể được gây ra nếu một số chương trình khác (như Strawberry Perl chẳng hạn ) đặt các TERMbiến môi trường hệ thống.

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


Có, nhưng không có tệp nào như vậy tồn tại trong cây tệp cho git. Câu trả lời khác đã hoạt động và có ý nghĩa.
Portaljacker

1
@Portaljacker - Ý bạn là gì? Đóng git bash, mở lại xem còn hoạt động không?
manojlds

4
Vâng, trong cửa sổ, cài đặt biến môi trường thông qua set hoặc GUI (cài đặt nâng cao như được hiển thị trong câu trả lời khác) là cách để thực hiện.
cgp

11
Câu trả lời này không thỏa mãn vì OP không nói rằng anh ta đang sử dụng bash và không có yêu cầu git phải được chạy từ bash. Cá nhân tôi sử dụng Command Prompt của windows và tôi muốn một giải pháp hoạt động cho môi trường đó.
David Grayson

7
@DavidGrayson Tên gọi chủ đề, tôi biết, nhưng bạn có thể làm điều tương tự trong Windows Command Prompt bằng cách sử dụng setx TERM msys. SETX(trái ngược với chỉ SET) ghi biến env vào sổ đăng ký.
rossipedia

184

Ví dụ: nếu bạn đang gặp sự cố trong cmd.exe, hãy xem cảnh báo tại đây:

CMD.EXE không có TERM được đặt chính xác

Sau đó, chỉ cần đặt các biến môi trường của bạn và bao gồm TERM = msys. Sau đó, mỗi lần bạn mở cmd.exe, biến của bạn sẽ được đặt chính xác.

Cách đặt biến môi trường TERM của bạn

BÂY GIỜ BẠN PHẢI KHỞI ĐỘNG VỎ CỦA BẠN (CMD.EXE). Chỉ cần chạy một cái mới. Và từ đó, bạn sẽ không có vấn đề gì nữa. Lần nữa:

CMD.EXE với bộ TERM chính xác


Vâng, điều này chắc chắn là. Tôi đang ở trên vista, và điều đó hoàn toàn giải quyết được. Cảm ơn teleball!
J Cole Morrison

2
Bất kỳ ý tưởng nào vấn đề này đến từ đâu hoặc thông báo này có nghĩa là gì?
Anthony Mastrean

7
@AnthonyMastrean nghĩa là thiết bị đầu cuối không hỗ trợ ghi vào các vị trí khác nhau trong cửa sổ đầu cuối. Git diff muốn viết trên toàn bộ cửa sổ, ví dụ như viết màn hình tiếp theo mà không cần thực hiện hàng triệu khoảng cách ngược để đưa con trỏ vào đúng vị trí mỗi lần.
jwg

Vì các chương trình không được thay đổi, vấn đề thực sự không phải là hỗ trợ thiết bị đầu cuối, thật là ngu ngốc khi chương trình khác định nghĩa biến TERM là một số thuật ngữ cơ bản, như @manojlds đã chỉ ra.
albfan

2
Nếu bạn đang sử dụng Vagrant, bản sửa lỗi này gây ra sự cố với bash shell. Ví dụ: nano sẽ không hoạt động nữa, gây ra lỗi: 'msys': không xác định loại thiết bị đầu cuối
Sirrah,

16

Các câu trả lời trên không hoàn toàn phù hợp với tôi, vì vậy tôi đã làm:

export TERM=msys 

thành " [githome] / etc / profile " ở trên cùng nhưng nó chỉ thực hiện các thay đổi đối với git bash. Sau đó, tôi đã thêm

@set TERM=msys

thành " [githome] /cmd/git.cmd " sau @setlocal (Tôi chỉ cài đặt git chạy từ dòng lệnh). Có thể quyết định này không thực sự tốt nhưng nó phù hợp với tôi và không có bất kỳ cảnh báo đầu cuối nào. (Tôi sử dụng git phiên bản 1.7.10.msysgit.1).


2
Đối với windows, tôi chỉ cần đặt biến môi trường TERM thành msys, có thể được thực hiện thông qua SETX.
cgp

14

Câu trả lời có thể được tìm thấy ở đây , trong đó tác giả của giải pháp tuyên bố rằng:

biến môi trường TERMđã được đặt thànhdumb

đó là thay vì

TERM=cygwin

Bạn có thể thay đổi điều đó thành

TERM=msys

để giải quyết vấn đề trong tầm tay.


Hóa ra câu trả lời này chỉ hoạt động cho phiên hiện tại của gitbash, đã phải thay đổi nó thành câu trả lời khác.
Portaljacker

6

Tôi làm việc trong powershell và tôi có tệp thực thi git trực tiếp trong đường dẫn của mình.

Không có câu trả lời được đề xuất nào hoạt động, nhưng tôi đã tìm thấy một giải pháp phù hợp với mình.

Tôi đã thêm một dòng trong hồ sơ quyền hạn của mình:

$env:TERM="msys"

Đã khắc phục sự cố cho tôi.


Điều này dường như không còn là vấn đề đối với tôi nữa bằng cách sử dụng git phiên bản 1.7.11.msysgit.1 Tôi đã có thể xóa $ env: TERM = "msys" và bật lại tiện ích mở rộng màu trong thương mại mà không gặp vấn đề gì.
John Weldon

Xung đột với các ứng dụng khác sử dụng các thiết bị đầu cuối khác nhau là lý do bạn nên làm theo câu trả lời của manojlds và đặt TERM trong .bashrc của chính Git Bash thay vì thay đổi biến môi trường ở đây, điều này sẽ ảnh hưởng đến tất cả các chương trình.
jwg

1
@jwg điểm tốt, nhưng tôi sử dụng git mọi lúc và tôi thích powershell hơn để bash, vì vậy việc phải chạy bash chỉ để có được đầu ra màu là quá mức cần thiết đối với tôi.
John Weldon

Tôi đã thêm cái này vào tệp cmder profile..ps1 của tôi thay vì cấu hình powershell chung của tôi.
gerrard00

6

Một giải pháp nhanh chóng và bẩn thỉu trong trường hợp của tôi hóa ra là sử dụng --no-pagertùy chọn.

Theo mặc định, một số lệnh git (như log) sẽ sử dụng một máy nhắn tin như lessthể chúng mong đợi kết quả đầu ra dài. Máy nhắn tin yêu cầu những thứ như cuộn văn bản lên và xuống bằng các phím mũi tên, điều này đôi khi không hoạt động nếu giả định về loại thiết bị đầu cuối bạn đang sử dụng là sai (đây là nghĩa của từ "không đầy đủ chức năng").

Nếu bạn biết trước rằng đầu ra của bạn sẽ bị thiếu hoặc bạn chỉ muốn nó kết xuất đầu ra cho thiết bị đầu cuối và để cuộn lên chương trình đầu cuối của mình, bạn có thể ghi đè điều này và không sử dụng máy nhắn tin, ví dụ:

git --no-pager log

0

Trong trường hợp ai đó nhận được bash khởi chạy này từ Tiện ích mở rộng Git, hãy kiểm tra cài đặt cho Path to linux tools.... Của tôi đã được đặt thành C:\cygwin. Thay đổi nó để C:\Program Files (x86)\Git\bin\sửa nó cho tôi. Tôi không phải đặt biến TERM để khởi chạy bash theo cách này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.