为什么Windows上的git diff警告"终端没有完全正常运行"?

Por*_*ker 110 windows git diff msysgit

我在Windows上使用msysgit 1.7.7.1.使用时出错git diff.是什么造成的?msysgit中是否包含差异工具?我该怎么办?

警告:终端功能不全

tel*_*all 184

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

未正确设置TERM的CMD.EXE

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

如何设置TERM环境变量

现在你必须重新启动你的外壳(CMD.EXE).刚刚运行一个新的.从那里,你应该没有更多的问题.再次:

CMD.EXE具有正确的TERM设置

  • *这个*是Windows用户的正确答案. (27认同)
  • @AnthonyMastrean表示终端不支持写入终端窗口中的不同位置.Git diff希望在整个窗口中进行编写,例如编写下一个屏幕,而不需要做一百万个退格,每次都将光标放在正确的位置. (7认同)
  • 知道这个问题来自哪里或者这个消息_means_是什么? (2认同)
  • 如果您使用Vagrant,此修复程序会导致bash shell出现问题.例如nano将不再起作用,给出错误:'msys':未知的终端类型 (2认同)

man*_*lds 59

对于Git Bash,可以通过在〜/ .bashrc中添加以下行来修复:

export TERM=cygwin
Run Code Online (Sandbox Code Playgroud)

-要么-

export TERM=msys
Run Code Online (Sandbox Code Playgroud)

第一个似乎是git for windows的原创,第二个也是一个流行的已知形式"愈合".

如果某些其他程序(例如Strawberry Perl)设置TERM系统环境变量,则可能导致该问题.

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

  • 这个答案令人不满意,因为OP没有说他正在使用bash,并且没有要求git必须从bash运行.我个人使用Windows命令提示符,我想要一个适用于该环境的解决方案. (11认同)
  • @DavidGrayson Thread necro,我知道,但你可以使用`setx TERM msys`在Windows命令提示符中执行相同操作.`SETX`(而不是SET)将env变量写入注册表. (7认同)
  • 是的,在Windows中通过set设置环境变量或GUI(其他答案中显示的高级设置)是要走的路. (4认同)

小智 16

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

export TERM=msys 
Run Code Online (Sandbox Code Playgroud)

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

@set TERM=msys
Run Code Online (Sandbox Code Playgroud)

@setlocal之后的" [githome] /cmd/git.cmd "(我只从命令行安装了git).可能这个决定并不是真正的好,但它适用于我,并没有任何终端警告.(我使用git版本1.7.10.msysgit.1).

  • 对于Windows,我只需要将环境变量TERM设置为msys,这可以通过SETX完成. (2认同)

Mr_*_*ock 14

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

环境变量TERM设置为dumb

而不是

TERM=cygwin
Run Code Online (Sandbox Code Playgroud)

您可以将其更改为

TERM=msys
Run Code Online (Sandbox Code Playgroud)

解决手头的问题.


Joh*_*don 6

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

没有一个建议的答案有效,但我找到了一个适合我的解决方案.

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

$env:TERM="msys"
Run Code Online (Sandbox Code Playgroud)

哪个解决了我的问题.


Fel*_*lix 5

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

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

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

git --no-pager log
Run Code Online (Sandbox Code Playgroud)