Gem*_*i14 418 git bash msysgit mingw32 windows-7
在一个小项目的开发过程中,我一直在Windows和Ubuntu上使用Git,经常在两者之间来回翻转.问题是Git Bash一直变慢.
当我说慢时,我的意思是跑步cd需要8到25秒,运行git命令需要5-20秒,ls有时可能需要30秒.毋庸置疑,这并不好玩,更不用说非生产性了.我知道Git在Windows上比较慢,但这太荒谬了.
对我来说暂时工作的一个解决方案是禁用我的网络连接(如本答案所示),启动Git Bash,然后重新连接.有时它会在这样做之后继续快速运行数天,但性能总是最终会降低.我已经在msysgit讨论组,Stack Overflow,msysgit问题列表等中打开和关闭了几个星期,但我还没有找到有效的解决方案.
到目前为止,我已经尝试过:
git gc我确实读到有几个人成功禁用Bash完成,但理想情况下我想保持活跃.msysgit的版本是1.7.3.1-preview20101002,操作系统是Windows 7 x64.可以预见,在Linux上运行相同的东西是快速的.我会专门使用Linux,但我也需要在Windows中运行东西(某些应用程序,测试等).
有没有人遇到类似的问题?如果是这样,那么潜在的问题是什么?解决方案是什么(如果有的话)?
这超出了Git存储库,但仅供参考,我一直使用Git的存储库非常小:最多4-50个文件.
sho*_*zer 398
您可以通过运行三个命令来设置一些配置选项,从而显着加快Windows上的Git:
git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256
Run Code Online (Sandbox Code Playgroud)
笔记:
core.preloadindex 并行执行文件系统操作以隐藏延迟(更新:在Git 2.1中默认启用)
core.fscache 修复了UAC问题,因此您无需以管理员身份运行Git(更新:默认情况下在Git for Windows 2.8中启用)
gc.auto 最小化.git /中的文件数
Chr*_*lan 93
你在Bash提示符中显示Git信息吗?如果是这样,也许你无意中对每一个命令做了太多的工作.要测试这个理论,请尝试在Bash中进行以下临时更改:
export PS1='$'
Run Code Online (Sandbox Code Playgroud)
小智 79
我的Windows主目录在网络上,我怀疑Git Bash命令首先在那里查看.果然,当我查看$ PATH时,它首先列出/ h/bin,其中/ h是Windows文件服务器上的共享,即使/ h/bin不存在.我编辑了/ etc/profile并注释掉了将它放在$ PATH中的第一个导出命令:
#export PATH="$HOME/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
这使我的命令运行得更快,可能是因为Git Bash不再通过网络查看可执行文件.我的/ etc/profile是c:\ Program Files(x86)\ Git\etc\profile.
小智 38
我发现网络驱动器是性能问题.HOME指的是一个缓慢的网络份额.我无法覆盖,HOMEDRIVE但这不是我所看到的问题.
通过右键单击桌面上的计算机 - >属性 - >高级系统设置 - >环境变量添加到用户变量部分来设置环境变量
HOME=%USERPROFILE%
Run Code Online (Sandbox Code Playgroud)
Wil*_*ert 22
在对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\]
$ '
Run Code Online (Sandbox Code Playgroud)
这保留了彩色外壳的优点并显示当前分支名称(如果在Git存储库中),但在我的机器上显着更快,从0.75秒到0.1秒.
这是基于这篇博客文章.
Jef*_*amb 22
虽然您的问题可能是基于网络的,但我个人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中将"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中速度问题正在进行的其他工作.
Gem*_*i14 17
似乎完全卸载Git,重新启动(经典的Windows固化),并重新安装Git是治愈.我还清除了剩下的所有bash配置文件(它们是手动创建的).一切都很快.
如果由于某种原因重新安装是不可能的(或者是可取的),那么我肯定会尝试更改Chris Dolan的答案中引用的PS1变量; 它导致某些操作的显着加速.
小智 10
我通过使用"以管理员身份运行"启动cmd.exe解决了Windows 7 x64上的慢速Git问题.
只有在设备管理器中关闭 AMD Radeon Graphics(或 Intel Graphics)对我有帮助。
我在这里找到了答案: https://superuser.com/questions/1160349/git-is-extremely-slow-on-windows# =
正如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\]# '
Run Code Online (Sandbox Code Playgroud)
在我的Cygwin上,这比Wilbert的"fast_Git_PS1"答案要快- 200毫秒与400毫秒,所以它会减少你的一点点迟钝.
它没有那么复杂__git_ps1- 例如,当你进入.git目录等时它不会改变提示,但是对于正常的日常使用它是足够好和快速的.
这是在Git 1.7.9(Cygwin,但它应该适用于任何平台)上测试的.
我在Git Bash和Git GUI中遇到了同样的问题.两个程序都运行得很好,但随后他们随机慢下来爬行,我无法弄清楚原因.
事实证明,这是Avast.Avast导致各种程序(包括我编写的程序)发生了奇怪的事情,所以我禁用了一秒钟,果然,Bash现在运行速度和Linux一样快.我刚刚将Git程序文件文件夹(C:\Program Files\Git)添加到Avast排除列表中,现在它的运行速度与在Linux上的运行速度一样快.
是的,我知道防病毒软件不是原帖中的问题,但我会把它放在这里,以防它对某人有用.
通过更改以下Git配置,您可能还会获得非常出色的性能提升:
git config --global status.submoduleSummary false
Run Code Online (Sandbox Code Playgroud)
git status在Windows 7 x64上运行简单命令时,我的计算机花了30多秒钟才能运行。定义此选项后,命令立即生效。
如下页所述,激活Git自身的跟踪功能有助于我发现问题的根源,在您的安装中可能有所不同:https : //github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-慢
除了这些其他答案之外,我还通过使用并行子模块获取(自 2016 年初的 Git 2.8 以来)加速了具有多个子模块的项目。
这可以使用 完成git fetch --recurse-submodules -j8并设置git config --global submodule.fetchJobs 8,或者您拥有/想要使用的内核数量。