【问题标题】:Git Bash (mintty) is extremely slow on Windows 10 OSGit Bash (mintty) 在 Windows 10 操作系统上非常慢
【发布时间】:2017-08-10 19:28:50
【问题描述】:

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

git status 命令需要 7 秒 来执行,git stash 需要 很多分钟 来存储(即使没有任何东西可以存储)。另外,我想指出,git status 会立即打印结果,但我在几秒钟内无法输入新命令,如下图所示。

我已经尝试过解决link1link2 等类似问题的解决方案,但都没有奏效。

P.S.:我使用的是 Windows Defender 防病毒软件,它不会让我的 Bash 变慢。此外,cmd 需要更多时间来执行 git 命令,而 git bash 需要更长的时间来运行任何命令。


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

【问题讨论】:

  • 看来你的 bash 提示设置有问题。尝试设置PS1='$ ',以便禁用任何花哨的提示设置,然后看看它是否对你来说仍然很慢。
  • @holygeek,谢谢它的帮助。现在 git status 需要大约 3-4 秒而不是 7 秒。但它仍然很慢,对吧?
  • 只有GIT吗?你是在网络驱动器上,还是在 SSD 上?您在使用计算机时是否观察到随机延迟?
  • 是的,它只是 GIT,其他一切都很好。我不在网络驱动器或 SSD 上
  • 作为一个赏金新手,我在赏金原因和自定义消息方面都搞砸了禁用 AMD Radeon 驱动程序解决了我的问题,但我真的想知道 为什么 i> 部分。不胜感激。

标签: git windows-10 git-bash mingw-w64 mintty


【解决方案1】:

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

在 Windows 设备管理器中禁用 AMD Radeon 显卡驱动程序并切换到集成 Intel HD 显卡对我有用 - 无论出于何种原因。

希望对您有所帮助!

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

希望这有助于人们在仅集成英特尔高清显卡时遇到此问题!

【讨论】:

  • 老兄,你刚刚解决了我的问题,谢谢!我不知道为什么会这样,但禁用 AMD 驱动程序也为我修复了它。我疯狂地试图弄清楚发生了什么:)。
  • 伙计,非常感谢。我花了一整天的时间来完成这项工作。我永远不会看到这个。
  • 花了 5 天。最后这解决了这个问题。 :+1
  • 有人知道为什么禁用 AMD 驱动程序会有帮助吗?我正在努力在驱动程序如何影响 git bash 的性能之间建立联系。如果我不得不猜测,我会假设它可能与 git bash 窗口中的内容呈现有关。否则,正如@bySamo 所建议的那样,它是驱动程序中的错误吗?我可以在 AMD 驱动程序和 git bash 程序之间建立的唯一联系是窗口的渲染。有什么想法吗?我想这可能与他们提出的要求有关。
  • 该错误是 AMD 驱动程序将每个进程的进程销毁延迟 1 秒。 (我使用进程监视器发现了这个错误。)更新驱动程序修复了这个问题。
【解决方案2】:

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

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

另请参阅this related question 的答案。

【讨论】:

  • 出现这个问题的时候,我已经有了HOME环境变量。
  • 到目前为止,我已经至少三次回到这个答案。一定有什么东西偶尔会删除我的HOME 变量...
  • 我的问题是我的 HOME 文件夹位于共享网络文件夹中。由于我们主要在 VPN 中工作,GIT 读取 .gitconfig 文件的速度非常慢。可能是由于 VPN 上的慢速协议。现在我的家在我的本地硬盘上,一切都很快了。
  • 哇,有什么不同!网络共享 + VPN 实在是太可怕了.... 4-5 秒只是为了呈现提示。
  • 这在 Windows 10 上对我有用。顺便说一句,它不会让它闪电般快速,但会显着提高速度。
【解决方案3】:

我曾经遇到过同样的问题,我发现对我来说问题出在__git_ps1,基本上是一个包含状态信息的变量,例如分支名称、分离的头状态、在 git 目录中、在裸仓库中、在樱桃采摘或变基或合并的中间。

为了加快您的 git bash,请转到 $GitHome\etc\profile 并注释掉 __git_ps1 is 添加到 PS1 的 if-then。

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

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\]                                         
$ '     

【讨论】:

  • 我的意思是 ps1 改变了,但 git 仍然很慢
  • 在我的环境中,我必须编辑 $GIT_HOME/etc/profile.d/git-prompt.sh 并删除行 PS1="$PS1"'``__git_ps1``'(~第 31 行)。这就像一个魅力。
  • 我刚刚做了 PS1='$ ' 这让它在 Windows 10 上运行得更快。
  • 经过数小时的测试......图形驱动程序,HOME环境变量设置,以管理员身份启动git bash,没有任何帮助。但是将我<git_install_folder>/etc/profile.d/git-prompt.sh 中的 PS1 提示更改为使用 fast_git_ps1 功能,它立即开始加速。省略提示的 __git_ps1 部分甚至可以立即完成,但是当时缺少有用的分支信息....
  • 我有一个更快的。这里的核心问题主要基于这样一个事实,即每次在PS1 变量中生成提示时,它都会派生多个进程。解决方案是使用纯 bash。请参阅此处的要点(以及我利用PROMPT_COMMAND 的修改版本):gist.github.com/Ragnoroct/c4c3bf37913afb9469d8fc8cffea5b2f
【解决方案4】:

回复Lafexlosbounty

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

至于为什么:

Issue 1070 报告。

打开 Radeon 设置 GUI 并在等待 bash 提示时单击某些内容会立即释放某些内容并使其看起来很奇怪。

联系了 AMD,但没有回复...

这个project reports

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

Issue 1129 补充:

从 Windows 7(可能是 Vista?)开始,控制台能够通过 DirectWrite 显示自身,它建立在 Direct3D 之上,它严重依赖于 DirectX API 的驱动程序实现。

作为直接在 nvd3dumnvwgf2umxnvapi 工作的前 NVIDIA 员工,我可以告诉你,我们对这个决定是否明智持怀疑态度。
似乎 AMD 应该更加怀疑,也许他们的驱动程序质量会更好。

【讨论】:

  • 感谢您为写出答案所做的努力,但 top voted answer 中已经有这些链接,所以很遗憾,这并没有增加任何新内容,至少对我来说是这样。
【解决方案5】:

再试一次:

  • 你可以找到latest Git for 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\
    
  • 在同一 CMD 会话中设置您的 HOME

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

【讨论】:

  • 我必须卸载我的上一个版本的 git 吗?它也是 2.12.1,但不是便携式 git
  • @RohanBhatia 不;这是一个便携式版本:只需将其解压缩到您想要的任何位置。这样你就可以拥有多个版本的 Git。只有你的 PATH 需要调整。
  • @RohanBhatia 您的 PATH 是否仅包含 Git 和 System32 Windows 文件夹?您的视图是否位于驱动器 C:\ 中? (还是通过共享网络路径访问?) git status 在 CMD 会话中需要很长时间吗? (与 git bash 会话相反)
  • 你可以看到我的路径变量和其他环境变量here。不清楚视图位于驱动器 c 中的含义,但我的程序文件和其他所有内容都在 drive C 中。是的,不幸的是 git status 几乎与执行 git status 或任何其他 git 命令一样长。
  • @RohanBhatia 不需要环境变量 Windows。只需打开一个 CMD,输入我提到的“set”命令,cd 到你的视图,然后在那里尝试 git status(不需要 bash)
【解决方案6】:

我在 Windows 7 和 Window 10 上遇到了同样的问题,在使用 git bash 时,我运行的任何命令都需要相当长的时间才能执行。最后经过多次令人头疼的试验,发现问题是由于没有以管理员身份运行我的 git bash exe

步骤

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

希望这会有所帮助!!!!

【讨论】:

  • 你能解释一下为什么这可以解决问题吗?为什么用户权限会导致这样的性能提升?
【解决方案7】:

您的 PATH 是否充满垃圾?在我从 PATH 中删除不必要的东西之前,简单的命令有时对我来说需要 20 秒或更长时间。

Windows:回显 %PATH%

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

其他: 回声 $PATH

【讨论】:

  • 在 Windows 上这是set path btw。
  • superuser.com/questions/1070994/… 也想在这里引用这个。我认为清理尤其是英特尔的东西,让我的 shell 更快
  • 在不同的 Win7 AD 计算机上,每次按 Enter 键需要 2 秒。 CMD 工作速度很快。 MinGW,Cygwin 慢。英特尔显卡。尝试了所有的答案,让我发疯。
【解决方案8】:

尝试了以上对我有意义的所有方法,但没有帮助。

我似乎终于解决了这个问题。结果,Windows 的 Git 凭据管理器试图联系我的域控制器(因为我不在办公室,所以无法联系到),每次我想联系时都会造成很大的延迟(30 多秒)。 git checkout.

要解决此问题,只需完全禁用凭据管理器,现在一切都相当快。这是禁用它的方法:How do I disable Git Credential Manager for Windows?

希望这对绝望的人有所帮助,干杯!

【讨论】:

    【解决方案9】:

    在 Windows Defender 排除列表中为 bash.exe、cmd.exe 和 conhost.exe 添加进程排除显然解决了我在 Windows 10 64 位上的问题。

    【讨论】:

      【解决方案10】:

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

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

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

      【讨论】:

      • 我几个星期都遇到同样的问题。谢了!
      【解决方案11】:

      对我来说,问题出在安装的软件 Strawberry Perl

      我正在使用下一个适用于 Windows 10 的开源软件:

      • OpenSSH
      • 腻子
      • Windows 版 Git
      • Qt 5.12.6

      但是,安装程序 Qt 5.12.6 会提示您安装 Strawberry Perl。似乎需要这个包来自动创建软件部署脚本。 Strawberry Perl 除了 Perl 之外还有更多的开源软件。但实际上在 99% 的情况下不需要安装 Strawberry Perl。

      在卸载 Strawberry Perl 之前,我的 PATH 变量变成了这样:

      PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\PuTTY\;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Users\stepanov_sm\AppData\Local\Microsoft\WindowsApps;
      

      卸载Strawberry Perl后,我的PATH变量变成了这样:

      PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Users\stepanov_sm\AppData\Local\Microsoft\WindowsApps;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\PuTTY\;
      

      可能是,Strawberry Perl 与 Git for Windows 中的二进制文件/脚本重叠。在卸载 Strawberry Perl 之前,命令 git --version 在 45 秒内执行!卸载Strawberry Perl后,命令立即开始执行。

      【讨论】:

      • 我查看了此处报告的每个可能的解决方案 - 大多数都没有应用或没有帮助。我安装了 Strawberry Perl(编译 Qt),我认为这是解决我问题的更改。缓慢实际上是在“sh.exe”中。 Git 调用它 - 所以我看到打开 shell 和调用“git”都变慢了。 AMD 驱动程序更改不适用于我(我有 NVidia 显卡)。 .bashrc、.bash_profile、/etc/profile 中的东西不是它,因为我用空的东西进行了测试。我的 AV 已经排除了 Git 目录。似乎从我的 PATH 中删除 C:\Strawberry\c\bin 是解决方法。
      【解决方案12】:

      像 pull、push 等命令似乎永远在 git bash 上运行。尝试 git windows 命令行提示 github 身份验证是必要的(网络浏览器/个人令牌)。在身份验证时,命令开始在 git windows 和 git bash 上正常工作。

      问题:https://github.com/git-for-windows/git/issues/3284

      【讨论】:

        【解决方案13】:

        升级到 Windows 11 为我解决了这个问题。 Git 控制台现在与本机命令提示符或 powershell 控制台一样快。所以,如果

        1. 您对缓慢的 git 控制台感到非常恼火,并且
        2. 您的系统是满足升级 11 要求的个人计算机,
        3. 您不介意 these 更改/弃用,

        我说试试看。

        【讨论】:

          【解决方案14】:

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

          由于某种原因,在我的计算机更新后——我的计算机上没有 Git bash,所以我不得不重新下载新的 2.19.2.windows.1 并且每次执行都需要 5-7 次时遇到同样的问题秒。

          我没有时间查看所有链接并禁用图形驱动程序等等。但是我在我的计算机上安装了带有 Github 的 Git shell,然后我将其拉起(Windows PowerShell),我可以立即在其中运行我需要的一切。

          【讨论】:

            【解决方案15】:

            我将 Windows 10 作为虚拟机运行(使用 VMware fusion),对我来说,在虚拟机设置中从 1 个处理器内核更改为 2 个处理器内核(我发现这是推荐的最小值)解决了这个问题。 @chunk_split 对@rakwaht 回答的评论指向相同的方向(即并发线程或进程减慢速度的问题)。

            【讨论】:

              【解决方案16】:

              自 2 个月以来,我一直在与 git bash 斗争,因为我的同事(根问题)告诉我存储 git 凭据,我不知道 Windows 10 发生了什么,但它搞砸了。我注意到,每当它启动时,它都会检查与域服务器的连接。这是我的解决方案。我已经从这些论点中删除了 属性 -> 开始于:%HOMEDRIVE%%HOMEPATH%

              开始 -> 搜索 Git Bash -> 打开文件位置 -> Git Bash -> 右键单击​​ -> 属性 -> 直接访问 -> 开始并删除您那里的任何内容。

              【讨论】:

                【解决方案17】:

                对我来说,解决方案是将 HOME 环境变量设置为我的用户文件夹。

                转到Start - 输入"environment" - 选择"Edit environment variables for your account"

                在顶部列表中,检查HOME 变量是否存在。如果它在那里,改变它的价值。如果没有,请点击New...

                Variable name 将是 HOMEVariable value 将是路径,例如 C:\Users\<username>

                这对我有帮助的原因是默认情况下,我的主目录指向共享网络驱动器。这会降低 GIT 的速度,因为它正在连接到该网络驱动器。

                【讨论】:

                  【解决方案18】:

                  对我来说,解决的是:

                  1. 更新 git bash(版本 2.34.1+)
                  2. 以管理员身份运行(因此它将运行所有安装后脚本)
                  3. 完成

                  在这之后,我的 git bash 打开得非常快。

                  【讨论】:

                    最近更新 更多