为什么Windows上的git diff警告“终端功能不完全”?


111

我在Windows上使用msysgit 1.7.7.1。使用时出现错误git diff。是什么原因造成的?msysgit中不包含差异工具吗?我该怎么办?

警告:终端功能不完全


1
一个可能的解决方案:kizzx2.com/blog/index.php/2009/01/07/...
Mr_Spock

好的,msysgit很好地使用了git,它的名字有点像。因此,我以msys作为术语,并且它起作用了!将说明发布在格式正确的答案中,这样我就可以奖励您一些代表!
Portaljacker

在powershell中运行:$ env:Term =“ xterm”
Anton Soradoi 2015年

Answers:


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 2011年

4
是的,在Windows中,可以通过set或GUI(其他答案中所示的高级设置)设置环境变量。
cgp 2012年

11
这个答案并不令人满意,因为OP并没有说他在使用bash,并且没有要求必须从bash运行git。我个人使用Windows Command Prompt,并且我想要一个适用于该环境的解决方案。
David Grayson 2012年

7
@DavidGrayson线程坏死,我知道,但是您可以在Windows Command Prompt中使用来做同样的事情setx TERM msysSETX(而不是SET)将env变量写入注册表。
rossipedia

184

例如,如果您在cmd.exe中遇到问题,请在此处查看警告:

没有正确设置TERM的CMD.EXE

然后只需设置环境变量并包含TERM = msys。此后,每次打开cmd.exe时,将正确设置变量。

如何设置TERM环境变量

现在,您必须重新启动外壳(CMD.EXE)。只需运行一个新的。从那里开始,您应该再没有其他问题了。再次:

具有正确的TERM集的CMD.EXE


是的,绝对是。我在远景上,这完全解决了它。谢谢Teleball!
J科尔·莫里森

2
您知道此问题来自何处或该消息意味着什么吗?
Anthony Mastrean

7
@AnthonyMastrean表示终端不支持在终端窗口中写入不同位置。Git diff希望在整个窗口中进行写操作,例如编写下一个屏幕,而不用做一百万个退格键来使光标每次都位于正确的位置。
jwg 2013年

由于程序没有改变,真正的问题不是终端支持,@ manojlds指出,其他将TERM变量定义为基本术语的程序愚蠢(少了)。
albfan 2014年

2
如果您使用的是Vagrant,此修补程序将导致bash shell出现问题。例如,nano将不再起作用,并给出错误:'msys':未知的终端类型
Sirrah,

16

上述答案对我而言并不完全有效,所以我做到了:添加

export TERM=msys 

到顶部的[[githome] / etc / profile “,但仅对git bash进行了更改。然后我加了

@set TERM=msys

@setlocal之后的“ [githome] /cmd/git.cmd ”(我仅从命令行安装了git run)。可能这个决定并不是很好,但是对我有用,并且没有任何终端警告。(我使用git版本1.7.10.msysgit.1)。


2
对于Windows,我只需要将环境变量TERM设置为msys,这可以通过SETX完成。
cgp 2012年

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”并重新启用颜色扩展,而不会出现问题。
约翰·韦尔登

与使用不同终端的其他应用程序的冲突是您应遵循manojlds的回答并在Git Bash自己的.bashrc中设置TERM而不是在此处更改环境变量的原因,这将影响所有程序。
jwg 2013年

1
@jwg是个好点,但是我一直都使用git,并且我更喜欢Powershell而不是bash,因此对我来说,仅运行bash来获取颜色输出就太过麻烦了。
John Weldon 2013年

我将此添加到了cmder profile..ps1文件中,而不是将其添加到一般的powershell配置文件中。
gerrard00 '16

6

在我看来,一种快速而肮脏的解决方案是使用该--no-pager选项。

默认情况下,某些git命令(如log)将使用分页器,例如less它们期望输出很长。传呼机需要诸如使用箭头键上下滚动文本之类的操作,如果关于您所使用的终端类型的假设是错误的(这就是“功能不完全”的意思),有时这将不起作用。

如果您提前知道输出会很短,或者只想将输出转储到终端并向上滚动到终端程序,则可以覆盖此内容,而根本不使用寻呼机,例如:

git --no-pager log

0

万一有人从Git Extensions获得了启动提示,请检查的设置Path to linux tools...。我的预定为C:\cygwin。对其进行更改以对其进行C:\Program Files (x86)\Git\bin\修复。我不必设置TERM变量来以这种方式启动bash。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.