เหตุใด git ที่แตกต่างกันใน Windows จึงเตือนว่า“ เทอร์มินัลทำงานไม่สมบูรณ์”


111

ฉันใช้msysgit 1.7.7.1บน Windows git diffฉันได้รับข้อผิดพลาดเมื่อใช้ สาเหตุนี้คืออะไร? ไม่มีเครื่องมือ diff ที่รวมอยู่ใน msysgit หรือไม่? ฉันควรทำอย่างไรดี?

คำเตือน: เทอร์มินัลทำงานไม่สมบูรณ์


1
ทางออกที่น่าจะเป็น: kizzx2.com/blog/index.php/2009/01/07/…
Mr_Spock

โอเค msysgit ใช้ git มันเป็นชื่อ ดังนั้นฉันจึงทำตามด้วย msys เป็นระยะและได้ผล! โพสต์คำอธิบายในรูปแบบคำตอบที่ดีเพื่อให้ฉันสามารถให้รางวัลคุณได้!
Portaljacker

ใน powershell run: $ env: Term = "xterm"
Anton Soradoi

คำตอบ:


62

สำหรับ Git Bash สามารถแก้ไขได้โดยเพิ่มบรรทัดต่อไปนี้ใน ~ / .bashrc:

export TERM=cygwin

-หรือ-

export TERM=msys

ครั้งแรกดูเหมือนจะเป็นต้นฉบับโดย git สำหรับ windows แบบที่สองเป็นที่รู้จักในรูปแบบ "รักษา" เช่นกัน

ปัญหาอาจเกิดขึ้นได้หากโปรแกรมอื่น (เช่นStrawberry Perl ) ตั้งค่าไฟล์TERMตัวแปรสภาพแวดล้อมของระบบ

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


ใช่ แต่ไม่มีไฟล์ดังกล่าวอยู่ในโครงสร้างไฟล์สำหรับ git คำตอบอื่น ๆ ได้ผลและสมเหตุสมผล
Portaljacker

1
@Portaljacker - คุณหมายถึงอะไรทำงาน? ปิด git bash เปิดอีกครั้งและดูว่ายังใช้งานได้หรือไม่
manojlds

4
ใช่ใน windows การตั้งค่าตัวแปรสภาพแวดล้อมผ่าน set หรือ GUI (การตั้งค่าขั้นสูงดังที่แสดงในคำตอบอื่น ๆ ) เป็นวิธีที่จะไป
cgp

11
คำตอบนี้ไม่น่าพอใจเพราะ OP ไม่ได้บอกว่าเขาใช้ bash และไม่มีข้อกำหนดว่าจะต้องเรียกใช้ git จาก bash โดยส่วนตัวแล้วฉันใช้พรอมต์คำสั่งของ windows และฉันต้องการโซลูชันที่เหมาะกับสภาพแวดล้อมนั้น
David Grayson

7
@DavidGrayson Thread necro ฉันรู้ แต่คุณสามารถทำได้ใน Windows Command Prompt โดยใช้setx TERM msysไฟล์. SETX(ตรงข้ามกับ SET เท่านั้น) เขียนตัวแปร env ไปยังรีจิสตรี
rossipedia

184

ตัวอย่างเช่นหากคุณประสบปัญหาใน cmd.exe โปรดดูคำเตือนที่นี่:

CMD.EXE โดยไม่ได้ตั้งค่า TERM อย่างถูกต้อง

จากนั้นตั้งค่าตัวแปรสภาพแวดล้อมของคุณและรวม TERM = msys หลังจากนั้นทุกครั้งที่คุณเปิด cmd.exe ตัวแปรของคุณจะถูกตั้งค่าอย่างถูกต้อง

วิธีตั้งค่าตัวแปรสภาวะแวดล้อม TERM ของคุณ

ตอนนี้คุณต้องรีสตาร์ทเปลือกของคุณ (CMD.EXE) เพียงแค่เรียกใช้ใหม่ และจากนั้นคุณจะไม่มีปัญหาอีกต่อไป อีกครั้ง:

CMD.EXE ด้วยการตั้งค่า TERM ที่ถูกต้อง


ใช่นี่แน่นอน ฉันอยู่บน vista และนั่นก็แก้ไขได้ทั้งหมด ขอบคุณ teleball!
J Cole Morrison

2
มีความคิดว่าปัญหานี้มาจากไหนหรือข้อความนี้หมายถึงอะไร
Anthony Mastrean

7
@AnthonyMastrean หมายความว่าเทอร์มินัลไม่รองรับการเขียนไปยังตำแหน่งต่างๆในหน้าต่างเทอร์มินัล Git diff ต้องการเขียนทั่วหน้าต่างเช่นเพื่อเขียนหน้าจอถัดไปโดยไม่ต้องใช้แบ็คสเปซเป็นล้านเพื่อให้เคอร์เซอร์อยู่ในตำแหน่งที่ถูกต้องในแต่ละครั้ง
jwg

เนื่องจากโปรแกรมไม่มีการเปลี่ยนแปลงปัญหาที่แท้จริงไม่ใช่การรองรับเทอร์มินัลมันเป็นโปรแกรมอื่น ๆ ที่กำหนดตัวแปร TERM เป็นคำศัพท์พื้นฐานเนื่องจาก @manojlds ชี้ให้เห็น
albfan

2
หากคุณใช้ Vagrant การแก้ไขนี้จะทำให้เกิดปัญหากับ bash shell เช่น nano จะไม่ทำงานอีกต่อไปทำให้เกิดข้อผิดพลาด: 'msys': ไม่ทราบประเภทเทอร์มินัล
Sirrah

16

คำตอบข้างต้นไม่ได้ผลสำหรับฉันอย่างเต็มที่ดังนั้นฉันจึงทำ: เพิ่ม

export TERM=msys 

เป็น " [githome] / etc / profile " ที่ด้านบน แต่ทำการเปลี่ยนแปลงสำหรับ git bash เท่านั้น จากนั้นฉันก็เพิ่ม

@set TERM=msys

เป็น " [githome] /cmd/git.cmd " หลัง @setlocal (ฉันติดตั้งเฉพาะ git ที่เรียกใช้จากบรรทัดคำสั่ง) อาจจะเป็นการตัดสินใจที่ไม่ดีอย่างแท้จริง แต่ก็ใช้ได้ผลสำหรับฉันและไม่มีคำเตือนใด ๆ เกี่ยวกับเทอร์มินัล (ฉันใช้ git เวอร์ชัน 1.7.10.msysgit.1)


2
สำหรับ windows ฉันแค่ตั้งค่าตัวแปรสภาพแวดล้อม TERM เป็น msys ซึ่งสามารถทำได้ผ่าน SETX
cgp

14

คำตอบสามารถพบได้ที่นี่ซึ่งผู้เขียนวิธีแก้ปัญหาอ้างว่า:

ตัวแปรสภาพแวดล้อมTERMถูกตั้งค่าเป็นdumb

นั่นคือแทนที่จะเป็น

TERM=cygwin

คุณสามารถเปลี่ยนเป็น

TERM=msys

เพื่อแก้ปัญหาในมือ


ปรากฎว่าคำตอบนี้ใช้ได้กับเซสชันปัจจุบันของ gitbash เท่านั้นต้องเปลี่ยนเป็นคำตอบอื่น
Portaljacker

6

ฉันทำงานใน powershell และฉันมี git ที่เรียกใช้งานได้โดยตรงในเส้นทางของฉัน

คำตอบที่แนะนำไม่ได้ผล แต่ฉันพบวิธีแก้ปัญหาที่เหมาะกับฉัน

ฉันเพิ่มบรรทัดในโปรไฟล์ powershell ของฉัน:

$env:TERM="msys"

ซึ่งแก้ไขปัญหาให้ฉัน


ดูเหมือนจะไม่ใช่ปัญหาสำหรับฉันอีกต่อไปเมื่อใช้ git เวอร์ชัน 1.7.11.msysgit.1 ฉันสามารถลบ $ env: TERM = "msys" และเปิดใช้งานส่วนขยายสีใน Mercurial อีกครั้งโดยไม่มีปัญหา
John Weldon

ความขัดแย้งกับแอปพลิเคชันอื่น ๆ ที่ใช้เทอร์มินัลต่างกันเป็นเหตุผลที่คุณควรทำตามคำตอบของ manojlds และตั้งค่า TERM ใน. bashrc ของ Git Bash แทนที่จะเปลี่ยนตัวแปรสภาพแวดล้อมที่นี่ซึ่งจะส่งผลต่อโปรแกรมทั้งหมด
jwg

1
@jwg เป็นจุดที่ดี แต่ฉันใช้ git ตลอดเวลาและฉันชอบ powershell ในการทุบตีดังนั้นการต้องรัน bash เพื่อให้ได้เอาต์พุตสีนั้นเกินความจำเป็นสำหรับฉัน
John Weldon

ฉันเพิ่มสิ่งนี้ลงในไฟล์ cmder profile..ps1 แทนโปรไฟล์ powershell ทั่วไปของฉัน
gerrard00

6

วิธีแก้ปัญหาที่รวดเร็วและสกปรกในกรณีของฉันคือการใช้--no-pagerตัวเลือก

ตามค่าเริ่มต้นคำสั่ง git บางคำสั่ง (like log) จะใช้เพจเจอร์เช่นlessหากพวกเขาคาดหวังว่าเอาต์พุตจะยาว เพจเจอร์ต้องการสิ่งต่างๆเช่นการเลื่อนข้อความขึ้นและลงโดยใช้ปุ่มลูกศรซึ่งบางครั้งก็ไม่ได้ผลหากสมมติฐานเกี่ยวกับประเภทของเทอร์มินัลที่คุณใช้ผิด (นี่คือความหมาย "ไม่ทำงานอย่างสมบูรณ์")

หากคุณทราบล่วงหน้าว่าเอาต์พุตของคุณจะสั้นหรือคุณเพียงแค่ต้องการให้เอาต์พุตดัมพ์ไปยังเทอร์มินัลและปล่อยให้เลื่อนขึ้นไปที่โปรแกรมเทอร์มินัลคุณสามารถแทนที่สิ่งนี้และไม่ใช้เพจเจอร์เลยเช่น:

git --no-pager log

0

ในกรณีที่มีคนได้รับการเปิดตัวทุบตีนี้จาก Git Path to linux tools...ส่วนขยายให้ตรวจสอบการตั้งค่าสำหรับ C:\cygwinเหมืองแร่ถูกกำหนดให้ เปลี่ยนเป็นC:\Program Files (x86)\Git\bin\แก้ไขให้ฉัน ฉันไม่ต้องตั้งค่าตัวแปร TERM เพื่อเปิด bash ด้วยวิธีนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.