Git Bash (mintty) 在 Windows 10 OS 上非常慢

Git Bash (mintty) is extremely slow on Windows 10 OS

几个月前,我在 Windows10 上安装了 Git。它运作良好了一段时间。但是现在,运行宁很慢。

git status命令需要 7 秒 来执行,git stash 需要 很多分钟 来存储(即使没有什么可藏)。另外,我想指出 git status 即时打印结果,但我不能在几秒钟内输入新命令,如下图所示。

我已经尝试过类似问题的解决方案,例如 link1, link2 等,但其中 none 行得通。

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


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

再试一次:

  • latest Git for Windows you can find, like 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_ps1 是我的问题,基本上是一个包含状态信息的变量,例如 git 中的分支名称、分离的头状态dir,在裸仓库中,在樱桃采摘、变基或合并的过程中。

为了加快您的 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/^..\(.*\)/ {} /')"    
}                                                                                            

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

我最近 运行 遇到了完全相同的问题。在尝试了该线程和许多其他线程的所有建议后,我终于找到了解决方案 here, respectively in the linked issue here

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

希望对您有所帮助!

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

中找到 sh.exe

希望这可以帮助只有集成英特尔高清显卡的人​​遇到这个问题!

你的 PATH 里满是垃圾吗?有时简单的命令对我来说需要 20 秒或更长时间,直到我从我的 PATH 中删除不必要的东西。

Windows: echo %PATH%

搜索 "edit environment variables" 进行更改。

其他: 回显 $PATH

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

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

另请参阅 this related question 的答案。

回应Lafexlos's

Disabling AMD Radeon driver solved my issue but I am really wondering on why part.
Would appreciate an answer which focuses on that.

至于原因:

Issue 1070 报道。

Bringing up the Radeon settings GUI and clicking on something while waiting for the bash prompt immediately releases something and makes it appear - weird.

联系了 AMD 但没有回应...

这个project reports:

But all of the graphic (terminal) output has to be displayed via those drivers.
They (the drivers) get their hooks into all parts of the system with hidden interrupts and time outs and goodness knows what. Shudders..

Issue 1129 添加:

Starting with Windows 7 (maybe Vista?) the console had the ability to display itself via DirectWrite, which is build on top of Direct3D, which is heavily dependent on driver implementations of DirectX API.

As a former NVIDIA employee who worked directly on nvd3dum, nvwgf2umx and nvapi I can tell you we were rather skeptical of the wisdom of this decision.
Seems AMD should have been more skeptical, perhaps their driver quality would have been better.

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

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

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

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

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

出于某种原因,在我的电脑更新后 -- 我的电脑上没有 Git bash,所以我不得不重新下载新的 2.19.2.windows.1 和我遇到了同样的问题,每次执行都需要 5-7 秒。

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

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

步骤

  1. 右击git bash exe.
  2. 点击'run as administrator'
  3. 输入命令,例如 cd /c/

希望对您有所帮助!!!!

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

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

要解决此问题,只需完全禁用凭据管理器,现在一切都相当快了。这是禁用它的方法:

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

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

我正在为 Windows 10:

使用下一个开源软件
  • OpenSSH
  • 腻子
  • Git 对于 Windows
  • 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 重叠 binaries/scripts 与 Windows。在卸载 Strawberry Perl 之前,命令 git --version 在 45 秒内执行!卸载Strawberry Perl后,命令立即开始执行

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

拉、推等命令似乎在 git bash 上用了很长时间。尝试 git windows 命令行提示 git 集线器身份验证是必要的(网络 browser/personal 令牌)。在身份验证时,命令在 git windows 和 git bash 上也开始正常工作。

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

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

开始 -> 搜索 Git Bash -> 打开文件位置 -> Git Bash -> 右键单击​​ -> 属性 -> 直接访问 ->从那里开始并删除它。

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

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

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

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

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

对我来说,固定的是:

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

之后,我的 git bash 打开速度非常快。

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

  1. 您对缓慢的 git 控制台感到厌烦,并且
  2. 您的系统是符合升级11要求的个人电脑,
  3. 你不介意these changes/deprecations,

我说试一试

这可能是由于 git-bash 的默认 PS1 配置所致。很容易测试。

勾选PS1

printf "$PS1\n"

应该输出类似

的内容
\[\]\[\]\u@\h \[\]$... \[\]\w\[\]`__git_ps1`\[\]$

罪魁祸首可能是__git_ps1,让我们调查一下

time __git_ps1
time __git_ps1
 (main)
real    0m0.290s
user    0m0.015s
sys     0m0.030s

我们可以将 PS1 更改为更简单(但更快)的东西

time git rev-parse --abbrev-ref HEAD 2> /dev/null
main

real    0m0.118s
user    0m0.000s
sys     0m0.031s

通过将以下内容添加到我们的 .bashrc

# Use simpler git ps1
PS1="$(sed 's@`__git_ps1`@ (`git rev-parse --abbrev-ref HEAD 2> /dev/null`)@' <<< "$PS1")"

这种方法比修改 git-forwindows 捆绑的 prompt/ps1 东西要好得多。

当我们这样做时,我还建议添加

# Delete git for windows PS1 newline
PS1=$(sed 's@\n@@g' <<< "$PS1")

这消除了额外的换行符,该换行符会导致 less 输出的第一行在退出寻呼机时滚出屏幕