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

为什么Windows上的git diff警告;终端功能不全;?,windows,git,diff,msysgit,Windows,Git,Diff,Msysgit,我正在Windows上使用msysgit 1.7.7.1。使用git diff时出现错误。这是什么原因造成的?msysgit中是否没有包含差异工具?我该怎么办 警告:终端功能不全 答案可以找到,解决方案的作者声称: 环境变量TERM设置为dumb 而不是 TERM=cygwin 你可以把它改成 TERM=msys 要解决当前的问题。对于Git Bash,可以通过在~/.bashrc中添加以下行来解决此问题: export TERM=cygwin -或- 第一种似乎是git for wind

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

警告:终端功能不全

答案可以找到,解决方案的作者声称:

环境变量
TERM
设置为
dumb

而不是

TERM=cygwin
你可以把它改成

TERM=msys

要解决当前的问题。

对于Git Bash,可以通过在~/.bashrc中添加以下行来解决此问题:

export TERM=cygwin
-或-

第一种似乎是git for windows的原创版本,第二种是众所周知的流行的“治愈”形式

如果其他程序(例如草莓Perl)设置
术语
系统环境变量,则可能会导致此问题


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

到顶部的“[githome]/etc/profile”,但它只对git bash进行了更改。然后我补充说

@set TERM=msys

在@setlocal之后添加到“[githome]/cmd/git.cmd”(我只安装了从命令行运行的git)。也许这个决定不是很好,但对我来说很有效,而且没有任何终端警告。(我使用git版本1.7.10.msysgit.1)。

我在powershell中工作,我的路径中直接有git可执行文件

建议的答案都不管用,但我找到了一个适合我的解决方案

我在powershell配置文件中添加了一行:

$env:TERM="msys"

这为我解决了问题。

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

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

现在必须重新启动SHELL(CMD.EXE)。运行一个新的。从那以后,你就不会再有问题了。再次:


如果有人从Git Extensions获得此启动bash,请检查
linux工具路径的设置…
。我的设置为
C:\cygwin
。将其更改为
C:\ProgramFiles(x86)\Git\bin\
为我修复了它。我不必设置TERM变量来以这种方式启动bash。

在我的情况下,一个快速而肮脏的解决方案是使用
--no pager
选项

默认情况下,一些git命令(如
log
)如果预期输出较长,将使用
less
之类的寻呼机。寻呼机需要像用箭头键上下滚动文本这样的东西,如果关于你在哪种终端上的假设是错误的(这就是“功能不全”的意思),这有时就不起作用了

如果您提前知道您的输出将很短,或者您只是希望它将输出转储到终端,并将滚动保留到终端程序,则您可以覆盖此选项,而根本不使用寻呼机,例如:

git --no-pager log


一个可能的解决方案是:好吧,msysgit使用git,这有点名副其实。所以我用msys作为术语,它起了作用!在一个格式良好的答案后,我可以奖励你一些代表的解释!在powershell运行中:$env:Term=“xterm”是,但git的文件树中不存在此类文件。另一个答案很有效,很有意义。@Portaljacker-你说的有效是什么意思?关闭git bash,再次打开,看看它是否还能工作?是的,在windows中,通过set或GUI设置环境变量(如另一个答案所示的高级设置)是一种方法。这个答案令人不满意,因为OP没有说他在使用bash,也没有要求git必须从bash运行。就我个人而言,我使用windows命令提示符,我想要一个适用于该环境的解决方案。@DavidGrayson Thread necro,我知道,但您也可以在windows命令提示符中使用
setx TERM msys
SETX
(与刚才的SET相反)将env变量写入注册表。结果表明,此答案仅适用于gitbash的当前会话,必须将其更改为另一个答案。对于windows,我只需要将环境变量TERM设置为msys,这可以通过SETX完成。是的,这肯定是正确的。我在vista上,这完全解决了问题。谢谢电视球!知道这个问题是从哪里来的,或者这个消息是什么意思吗?@AnthonyMastrean它意味着终端不支持在终端窗口中的不同位置写入。Git diff希望写满整个窗口,例如写下一个屏幕,而无需每次执行一百万次退格操作来将光标放在正确的位置。由于程序没有更改,真正的问题不是终端支持,而是Git(确切地说是更少)被其他程序愚弄了,因为其他程序将术语变量定义为一些基本术语,正如@manojlds所指出的,如果您使用的是Vagrant,这个修复程序会导致bashshell出现问题。例如,nano将不再工作,给出错误:“msys”:未知终端类型这似乎不再是我使用git版本1.7.11的问题。msysgit.1我能够删除$env:TERM=“msys”并在mercurial中重新启用颜色扩展,没有问题。与使用不同终端的其他应用程序的冲突是您应该遵循manojlds的答案并在Git Bash自己的.bashrc中设置术语的原因,而不是在此处更改环境变量,这将影响所有程序。@jwg很好,但我一直在使用git,而且我更喜欢powershell而不是bash,因此必须运行bash才能获得颜色输出对我来说太过分了。我将其添加到我的cmder配置文件..ps1文件中,而不是我的常规powershell配置文件中。
$env:TERM="msys"
git --no-pager log