在一个小项目的开发过程当中,我一直在Windows和Ubuntu上使用Git,常常在二者之间来回翻转。 问题是Git Bash一直变慢。 git
当我说慢时,个人意思是运行cd
须要8到25秒,运行git
命令须要5-20秒,而ls
有时须要30秒。 毋庸置疑,这并很差玩,更不用说非生产性了。 我知道Git在Windows上比较慢,但这太荒谬了。 github
对我来讲暂时工做的一个解决方案是禁用个人网络链接(如本答案所示 ),启动Git Bash,而后从新链接。 有时它会在这样作以后继续快速运行数天,但性能老是最终会下降。 我已经在msysgit讨论组,Stack Overflow,msysgit问题列表等中打开和关闭了几个星期,但我尚未找到有效的解决方案。 网络
到目前为止,我已经尝试过: 性能
git gc
我确实读到有几我的成功禁用Bash完成,但理想状况下我想保持活跃。 msysgit的版本是1.7.3.1-preview20101002,操做系统是Windows 7 x64。 能够预见,在Linux上运行相同的东西是快速的。 我会专门使用Linux,但我也须要在Windows中运行东西(某些应用程序,测试等)。 测试
有没有人遇到相似的问题? 若是是这样,那么潜在的问题是什么?解决方案是什么(若是有的话)? google
这超出了Git存储库,但仅供参考,我一直使用Git的存储库很是小:最多4-50个文件。 lua
在对Chris Dolan的回答的扩展中,我使用了如下替代PS1
设置。 只需将代码片断添加到〜/ .profile(在Windows 7上:C:/Users/USERNAME/.profile)。 spa
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秒。 操作系统
这是基于这篇博客文章 。 code
我在Windows 7 x64上运行Git for Windows(msysgit)做为有限的用户账户已经遇到了一样的问题。
从我在这里和其余地方读到的,共同的主题彷佛是缺少管理权限和/或UAC。 因为UAC在个人系统上已关闭,所以它尝试在程序文件目录中编写/删除某些内容的解释对我来讲是最有意义的。
不管如何,我经过安装带有zipinstaller的便携版Git 1.8解决了个人问题。 请注意,我必须解压缩.7z分发文件并将其从新打包为ZIP文件,以便zipinstaller工做。 我还必须手动将该目录添加到个人系统路径。
如今表现很好。 即便它安装在Program Files (x86)
目录中,我没有做为受限用户的权限,它彷佛也没有遇到一样的问题。
我将此归因于便携式版本在写入/删除文件的位置(多是这种状况)或从1.7升级到1.8的位置更为保守。 我不打算肯定哪个是缘由,足以说它如今好多了,包括Bash。
经过将core.preloadindex设置为true,我看到了一个不错的改进。
正如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,但它应该适用于任何平台)上测试的。
虽然您的问题多是基于网络的,但我我的经过两次修改加速了个人本地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/94和https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b查看Windows中速度问题正在进行的其余工做。