在Windows 7 x64上,Git Bash非常慢

妖精的绣舞 提交于 2020-02-26 02:45:30

在一个小项目的开发过程中,我一直在Windows和Ubuntu上使用Git,经常在两者之间来回翻转。 问题是Git Bash一直变慢。

当我说慢时,我的意思是运行cd需要8到25秒,运行git命令需要5-20秒,而ls有时需要30秒。 毋庸置疑,这并不好玩,更不用说非生产性了。 我知道Git在Windows上比较慢,但这太荒谬了。

对我来说暂时工作的一个解决方案是禁用我的网络连接(如本答案所示 ),启动Git Bash,然后重新连接。 有时它会在这样做之后继续快速运行数天,但性能总是最终会降低。 我已经在msysgit讨论组,Stack Overflow,msysgit问题列表等中打开和关闭了几个星期,但我还没有找到有效的解决方案。

到目前为止,我已经尝试过:

  • 将Git和项目文件夹添加到病毒扫描程序的排除列表中
  • 完全禁用我的病毒扫描程序(Kaspersky IS 2011)
  • 确保Outlook未运行(Outlook 2007)
  • 关闭所有其他应用程序
  • 以管理员身份运行Git Bash
  • 禁用网络连接,启动Git Bash并禁用连接
  • 禁用网络连接,启动Git Bash,重新启用连接(仅偶尔工作)
  • 运行git gc
  • 以及上述的组合

我确实读到有几个人成功禁用Bash完成,但理想情况下我想保持活跃。 msysgit的版本是1.7.3.1-preview20101002,操作系统是Windows 7 x64。 可以预见,在Linux上运行相同的东西是快速的。 我会专门使用Linux,但我也需要在Windows中运行东西(某些应用程序,测试等)。

有没有人遇到类似的问题? 如果是这样,那么潜在的问题是什么?解决方案是什么(如果有的话)?

这超出了Git存储库,但仅供参考,我一直使用Git的存储库非常小:最多4-50个文件。


#1楼

在对Chris Dolan的回答的扩展中,我使用了以下替代PS1设置。 只需将代码片段添加到〜/ .profile(在Windows 7上:C:/Users/USERNAME/.profile)。

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

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

这保留了彩色外壳的优点并显示当前分支名称(如果在Git存储库中),但它在我的机器上显着更快,从~0.75秒到0.1秒。

这是基于这篇博客文章


#2楼

我在Windows 7 x64上运行Git for Windows(msysgit)作为有限的用户帐户已经遇到了同样的问题。

从我在这里和其他地方读到的,共同的主题似乎是缺乏管理权限和/或UAC。 由于UAC在我的系统上已关闭,因此它尝试在程序文件目录中编写/删除某些内容的解释对我来说是最有意义的。

无论如何,我通过安装带有zipinstaller的便携版Git 1.8解决了我的问题。 请注意,我必须解压缩.7z分发文件并将其重新打包为ZIP文件,以便zipinstaller工作。 我还必须手动将该目录添加到我的系统路径。

现在表现很好。 即使它安装在Program Files (x86)目录中,我没有作为受限用户的权限,它似乎也没有遇到同样的问题。

我将此归因于便携式版本在写入/删除文件的位置(可能是这种情况)或从1.7升级到1.8的位置更为保守。 我不打算确定哪一个是原因,足以说它现在好多了,包括Bash。


#3楼

通过将core.preloadindex设置为true,我看到了一个不错的改进。


#4楼

正如Chris Dolan和Wilbert的回答所指出的那样, PS1会减慢你的速度

而不是完全禁用(如Dolan建议)或使用Wilbert提供的脚本,我使用更快的“哑PS1”。

它使用(git symbolic-ref -q HEAD || git rev-parse --short HEAD) 2> /dev/null

PS1='\033[33m\]\w \n\[\033[32m\]$((git symbolic-ref -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null) \[\033[00m\]# '

在我的Cygwin上,这比Wilbert的“fast_Git_PS1”答案更快 - 200毫秒与400毫秒,因此它可以减少你的一些快速迟缓。

它没有__git_ps1那么复杂 - 例如,当你进入.git目录等时它不会改变提示,但是对于正常的日常使用来说它足够好而且速度快。

这是在Git 1.7.9(Cygwin,但它应该适用于任何平台)上测试的。


#5楼

虽然您的问题可能是基于网络的,但我个人通过两次修改加速了我的本地git status调用十倍(7秒以上到700毫秒)。 这是一个700 MB的存储库,包含21,000个文件和大量的大型二进制文件。

一个是启用并行索引预加载。 从命令提示符:

git config core.preloadindex true
这将time git status从7秒更改为2.5秒。

更新!

以下不再需要。 从mysysgit 1.9.4开始修补此修补程序
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
但是,您必须通过键入启用该修复程序
git config core.fscache true

我还禁用了UAC和“luafv”驱动程序(需要重启)。 这会禁用Windows Vista,7和8中的驱动程序,该驱动程序会重定向尝试写入系统位置的程序,而是将这些访问重定向到用户目录。

要查看有关这会如何影响Git效果的讨论,请阅读: https//code.google.com/p/msysgit/issues/detail?id = 320

要禁用此驱动程序,请在regedit中将HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv的“start”键HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv为4以禁用驱动程序。 然后,将UAC置于其最低设置“永不通知”。

如果禁用此驱动程序会让您保持警惕(应该),则在与系统分区不同的驱动器(或分区)上运行替代方案。 显然,驱动程序仅在系统分区上的文件访问上运行。 我有一个第二个硬盘驱动器,并在我的C驱动器上运行此注册表修改时看到相同的结果,因为我在D驱动器上没有它。

此更改需要将time git status从2.5秒降低到0.7秒。

您还可以关注https://github.com/msysgit/git/pull/94https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b查看Windows中速度问题正在进行的其他工作。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!