Foreword

遇到一个奇怪的问题,重启电脑以后,使用Git Bash 弹出对话框非常慢,弹出来以后显示当前路径也非常慢,输入任何指令慢,反馈也非常慢,多次重启重装都无法解决。

Git Bash

https://stackoverflow.com/questions/42888024/git-bash-mintty-is-extremely-slow-on-windows-10-os

以此条问答,试遍了了所有方案,全都不能解决

HOME缺失

简单说就是git找不到HOME所在路径,所以导致了延迟启动,这个简单,环境变量里直接加上HOME,指定到C:\Users\你的用户名,这个问题一般可能会出现在Linux那边,windows其实反倒不会

AMD Radeon graphics driver问题

部分笔记本双显卡的情况下,AMD的显卡某个驱动会导致git显示有问题,更新或者禁用显卡(为了git不要显卡了,有点脑残)就能解决

__git_ps1

__git_ps1这个是git目录下/etc/profile中的一段命令行调用的代码,但是新版本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\]                                         
$ '     

清理path

这个简单,就是环境变量中path里可能有多个git或者多种包含其他库的循环依赖什么的,导致这里git启动有问题

管理员启动

只要是正常安装的git,大部分是不会有管理员的问题的

关闭git的Credentials Manager

https://stackoverflow.com/questions/37182847/how-do-i-disable-git-credential-manager-for-windows

git在启动和初始化的时候,是需要拿用户的账号密码,甚至包含仓库的各种上游信息的,所以如果是电脑所在的AD域出现了问题,确实有可能导致这里延迟非常高

360杀毒软件

普遍国内360会针对git,导致git启动和操作响应特别慢,但是windows自带的firewall并不会,就算加了白名单或者是直接关闭整个防火墙,也不能解决这个问题

类似的电脑管家之类的对于文件有防护或者是什么的,都有可能拖慢git

PS1

还是PS1的问题,但是这里通过统计信息可以看到哪条命令执行的慢,时间都被哪个阶段消耗了

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

不过依然没什么卵用,并不知道具体细节在哪里

断网后git bash很快,联网后git bash非常慢

我也有这种情况,虽然也有人提出来了解决办法,但是对我并没有用

简单说他非常类似上面的Credentials问题,git默认密码等信息是存储在db里的,当然也可以存储在本地文件里

click start
type "git bash"
right click icon, left click "Run as administrator"

# get current user entry and cache it in /etc/passwd
mkpasswd -c > /etc/passwd

# edit nsswitch and comment out "db" to prevent accessing Microsoft AD
vim /etc/nsswitch.conf

passwd: files # db
group: files # db

而一旦网络有问题,访问db有巨大延迟,就会导致实际git bash 延迟

虽然他非常解决真相,但是还是没解决我的问题

删除.bash_history

.bash_history文件是所有命令行操作的历史,如果不小心执行了什么批处理文件或者什么死循环之类的东西,可能会导致这个历史文件内容膨胀到巨大,而每次启动git也需要加载历史操作,方便上下按键显示命令

然而我这个文件是正常的

FIPS策略

开了FIPS会导致加密算法不同,git直接无法解析之前的加密内容了,自然也就超时了

优化git配置

git config --global core.preloadindex true  
git config --global core.fscache true  
git config --global gc.auto 256  

毫无卵用

重装老版/最新

重装老版本的git或者是最新都不起作用

VPN

如果开启了VPN,可能会导致VPN代理了某些不该被代理的地址,实际并没有

但是有一种特殊情况,某些git的user用户路径或者是存储的路径是存在于远端的或者被云同步了,这就会导致git每次启动的时候查询这些文件需要先从云端拿最新的,进而导致git卡顿

重装系统

大概率可以解决,但是小小git他也配?

资源监控

也有说可能是git调用了什么东西,可以通过资源监控看出来,实际上无论是cpu、网络,还是磁盘占用,git都没啥突出的,反倒是git的经常出现长时间挂起,这个很反常,但是这是果,并不能找到他的因

最终解决

由于我也有断网后git bash很快,联网后git bash非常慢的现象,所以盲猜和系统密码或者权限认证相关的东西有关。

于是乎打开了windows用户认证

发现好像这里是有windows备份的,结合之前Sticky Notes出现的认证问题,可能是我windows存储的账号密码同步有问题?

于是验证,果然报错

那这里就转而解决这个问题了,取消了代理,直接裸连,让他转圈转了几分钟,然后git恢复正常

Summary

弱智问题,解决起来简单,但是找到发生的条件也太难了点

Quote

https://stackoverflow.com/questions/42888024/git-bash-mintty-is-extremely-slow-on-windows-10-os

https://ask.csdn.net/questions/1095655

https://www.bilibili.com/read/cv17411474/