Git Bash(mintty)在Windows 10操作系统上非常慢


80

几个月前,我在Windows 10上安装了Git 。它工作了一段时间。但是现在,它的运行速度如此之慢。

git status命令执行需要7秒钟,并且git stash需要花费很多分钟进行存储(即使没有要存储的内容)。另外,我想指出的是,git status该命令可以立即打印结果,但是我无法在几秒钟内输入新命令,如下图所示。

屏幕像这样卡住了7秒钟

我曾尝试在网上冲浪以解决诸如thisthis等问题,但这些方法均无效。

PS:我使用Windows Defender防病毒软件,但这不会使Bash变慢。另外,cmd需要更多时间来执行git命令,而git bash需要更长的时间来执行任何命令。


更新:我已经切换到Ubuntu,因此,我目前不使用Windows。因此,我无法检查是否有任何解决方案对我有用。我接受@pschild提供的答案,因为它的支持最多,并且似乎已经为许多人服务。


4
看来问题出在您的bash提示设置上。尝试进行设置,PS1='$ '以便取消激活任何花哨的提示设置,然后查看它是否仍然很慢。
holygeek

@holygeek,谢谢帮助。.现在git status大约需要3-4秒而不是7秒。但是它仍然很慢,对吧?
罗汉·巴蒂亚

只是GIT吗?您正在使用网络驱动器还是SSD?您在使用计算机时是否观察到随机滞后?
Guillaume F.

是的,这只是GIT,其他一切都很好。我不在网络驱动器或SSD上
Rohan Bhatia

1
作为赏金新手,我花了很多时间在赏金原因和自定义消息上,禁用AMD Radeon驱动程序解决了我的问题,但我真的很想知道为什么要这么做。
Lafexlos

Answers:


66

我最近遇到了完全相同的问题。从这个线程和许多其他线程尝试所有的意见后,我终于找到了一个解决方案在这里,分别在链接的问题在这里

无论出于何种原因,在Windows设备管理器中禁用AMD Radeon图形驱动程序并切换到集成的Intel HD图形对我来说都是有效的。

希望有帮助!

就我而言,我发现sh.exe shell比bash.exe快得多。您可以在git_install_dir / bin中找到sh.exe。

希望这有助于人们在仅集成Intel HD图形的情况下解决此问题!


2
老兄,您刚刚解决了我的问题,谢谢!我不知道为什么会这样,但是禁用AMD驱动程序也为我修复了它。我发疯了,试图找出正在发生的事情:)。
DVM

1
伙计,非常感谢。我花了整整一天时间来进行这项工作。我永远不会看到这个。
Ante Braovic

1
花了5天。终于解决了这个问题。:+1
Swagat Swain

7
有谁知道禁用AMD驱动程序有何帮助?我正在努力在驱动程序如何影响git bash的性能之间建立联系。如果我不得不猜测,我可能认为它可能与git bash窗口中内容的呈现有关。否则,如建议的@bySamo,它是否是驱动程序中的错误?我可以在AMD驱动程序和git bash程序之间建立的唯一连接是窗口的呈现。有什么想法吗?我想这可能与他们提出的要求有关。
Lsakurifaisu

7
错误是AMD驱动程序将每个进程的进程破坏延迟1秒。(我使用Process Monitor识别了该错误。)更新驱动程序可以解决此问题。
nyanpasu64

47

对我来说,解决方案是将HOME变量设置为我的用户目录(根据此答案)。为此(至少在Windows 7上):

  1. 右键单击文件资源管理器中的“计算机”。
  2. 打开高级系统设置。
  3. 开放式环境变量
  4. 在系统变量下,单击“新建...”
  5. 输入“ HOME”作为变量名,并输入用户目录的值(例如“ C:\ Users \ jdoe”)。

另请参阅此相关问题的答案。


在发生此问题时,我已经有一个HOME环境变量。
罗汉·巴蒂亚

到目前为止,我至少已经三次返回此答案。某些内容HOME有时会删除我的变量...
Paul Wintz '18

3
我的问题是我的HOME文件夹位于共享的网络文件夹中。由于我们主要在VPN中工作,因此GIT读取.gitconfig文件的速度非常慢。可能是由于VPN上的协议速度较慢。现在我的家在本地硬盘上,一切都很快。
亚历山大·乔宾

10

再试一次:

  • 最新的Git的Windows,你可以找到,像PortableGit-2.12.1-64-bit.7z.exe(解压缩任何你想要的,没有设置)
  • 然后在一个CMD会话中,将您的设置PATH为:

    set G=c:\path\to\latest\git
    set PATH=%G%\bin;%G%\usr\bin;%G%\mingw64\bin
    set PATH=%PATH%;C:\windows\system32;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\
    
  • 将您设置HOME在同一CMD会话中

    set HOME=%USERPROFILE%
    
  • 最后,键入bash,然后查看是否有任何Git操作仍然很慢。


我需要卸载最新版本的git吗?它也是2.12.1,但不是可移植的git
Rohan Bhatia

@RohanBhatia否;这是一个便携式版本:只需将其解压缩到您想要的任何位置即可。您可以通过这种方式拥有多个版本的Git。仅您的PATH需要被调整。
VonC

@RohanBhatia您的PATH是否仅包含Git和System32 Windows文件夹?您的视图是否位于驱动器C:\中?(或者是否通过共享网络路径访问它?)git status在CMD会话中是否花费很长时间?(而不是git bash会话)
VonC

您可以在此处查看我的路径变量和其他环境变量。不清楚位于驱动器c中的视图是什么意思,但是我的程序文件和其他所有文件都位于驱动器C中。是的,不幸的是,git status执行git status或任何其他git命令所花费的时间几乎相同。
罗汉·巴蒂亚

@RohanBhatia不需要环境变量Windows。只需打开CMD,键入set我提到的' '命令,进入您的视图cd,然后在其中尝试git状态(无需bash)
VonC

10

我曾经遇到过同样的问题,发现的问题是 __git_ps1,基本上是一个变量,该变量包括状态信息,例如分支名称,分离的头状态,git dir,裸仓库中,在采摘樱桃的过程中或重新设基或合并。

为了加快git bash的速度,请转到$ GitHome \ etc \ profile并注释掉if-then,然后将其__git_ps1 is添加到PS1中。

无论如何,您要注释掉的信息都是非常有用的,特别是如果您刚开始使用GIT。这是一个更快的版本,可以在Internet上找到,并且在我的系统上非常成功地被我使用:

fast_git_ps1 ()                                                                              
{                                                                                            
    printf -- "$(git branch 2>/dev/null | grep -e '\* ' | sed 's/^..\(.*\)/ {\1} /')"    
}                                                                                            

PS1='\[\033]0;$MSYSTEM:\w\007                                                                
\033[32m\]\u@\h \[\033[33m\w$(fast_git_ps1)\033[0m\]                                         
$ '     

2
我的意思是是ps1更改了,但是git仍然很慢
Rohan Bhatia

2
在我的环境中,我必须编辑$GIT_HOME/etc/profile.d/git-prompt.sh和删除行PS1="$PS1"'``__git_ps1``'(〜第31行)。这就像一个魅力。
bobbel

1
我只是做了PS1 =“$”,并使得它运行在Windows 10快得多
唐·史密斯

1
经过数小时的测试……图形驱动程序,HOME环境变量设置,以管理员身份启动git bash,无济于事。但是在我更改PS1提示符<git_install_folder>/etc/profile.d/git-prompt.sh以使用fast_git_ps1函数后,它迅速开始加速。省略提示甚至是__git_ps1部分使其瞬间,但有用的分支信息缺失然后....
devnull69

1
我有一个快得多的。这里的核心问题很大程度上是基于这样的事实,即它每次在PS1变量中生成提示时都会分叉多个进程。解决方案是使用纯bash。请参见此处的gist(以及利用的修改后的版本PROMPT_COMMAND):gist.github.com/Ragnoroct/c4c3bf37913afb9469d8fc8cffea5b2f
chunk_split

9

为了回应Lafexlos赏金

禁用AMD Radeon驱动程序解决了我的问题,但我真的很想知道为什么要这样做。
希望能有一个针对此的答案。

至于原因:

发行1070个报告。

调出Radeon设置GUI并在等待bash提示的同时单击某些内容,立即释放某些内容并使其显示-很奇怪。

已联络AMD,但没有回应...

项目报告

但是所有图形(终端)输出必须通过这些驱动程序显示。
他们(驱动程序)通过隐藏的中断和超时进入系统的所有部分,而天知道什么。颤抖..

问题1129添加:

从Windows 7(也许是Vista?)开始,该控制台可以通过DirectWrite进行显示,DirectWrite是在Direct3D的基础上构建的,而Direct3D很大程度上取决于DirectX API的驱动程序实现。

作为一名前员工NVIDIA谁工作直接nvd3dumnvwgf2umx而且nvapi我可以告诉你,我们是相当怀疑这个决定的智慧。
似乎AMD应该更持怀疑态度,也许他们的驱动程序质量会更好。


感谢您为撰写答案所做的努力,但最受好评的答案中已经包含了这些链接,因此很遗憾,这并没有添加任何新内容,至少对我而言。
Lafexlos

5

在使用git bash的同时,我在Windows 7和Windows 10上也遇到了同样的问题,我运行的任何命令都将花费大量时间来执行。最终,在经过许多令人震惊的尝试后,发现该问题是由于未以管理员身份运行git bash exe引起的,

脚步

  1. 右键单击git bash exe。
  2. 点击“以管理员身份运行”
  3. 输入诸如cd / c /之类的命令

希望这可以帮助!!!!


3

尝试了以上对我来说没有任何意义的一切,没有帮助。

最后,我似乎已经解决了这个问题。原来,适用于Windows的Git Credentials Manager试图与我的域控制器联系(由于我不在办公室,所以联系不上),并且每次我想例如时,都会造成很大的延迟(超过30秒)git checkout

要解决此问题,只需完全禁用Credentials Manager,现在一切都很快。这是如何禁用它:如何禁用Windows的Git Credential Manager?

希望这可以帮助绝望的人们,加油!


2

在Windows Defender排除列表中为bash.exe,cmd.exe和conhost.exe添加进程排除显然可以在Windows 10 64bit上为我解决此问题。


2

您的PATH是否充满垃圾?有时直到我从PATH中删除了不必要的内容之前,简单的命令对我来说都是20秒或更长时间。

Windows:echo%PATH%

搜索“编辑环境变量”进行更改。

其他:echo $ PATH


1
在Windows上,set path顺便说一句。
1mike12 '18

superuser.com/questions/1070994/…也想在此引用这一内容。我认为清洁尤其是英特尔的东西会使我的外壳更快
Joel

在另一台Win7 AD计算机上,每次按Enter键都需要2秒。CMD工作速度很快。MinGW,Cygwin慢。英特尔显卡。尝试了所有答案,使我发疯。
菲利普·雷哥

1

我有一个类似的问题,但是只有当我git bash以普通用户身份运行时,当我git bash以管理员身份启动时,所有命令才能非常快地运行。

以我为例,该问题是由F-Secure防病毒引起的。我git.exe在排除目录列表中添加了包含目录(从扫描中排除),它为我解决了这个问题。

如何排除目录:https : //community.f-secure.com/t5/Business/Exclusion-objects-from-Real-Time/ta-p/66013


我几个星期都遇到同样的问题。Tks!
Thiago Lunardi

0

免责声明:不是解决方法。但快速的解决方法。

由于某种原因,我的计算机更新后-我的计算机上没有安装Git bash,因此我不得不重新下载一个新的2.19.2.windows.1,每次执行都需要5-7秒,我遇到了同样的问题。

我没有时间研究所有链接并禁用图形驱动程序,什么也没有。但是我在计算机上安装了Github并安装了Git外壳,然后将其拉起(Windows PowerShell),就可以立即在其中运行所有需要的东西。

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.