Msysgit bash 在 Windows 7 中速度非常慢
Posted
技术标签:
【中文标题】Msysgit bash 在 Windows 7 中速度非常慢【英文标题】:Msysgit bash is horrendously slow in Windows 7 【发布时间】:2011-02-19 14:47:40 【问题描述】:我喜欢 git,并且经常在家中在 OS X 上使用它。在工作中,我们在 Windows 上使用 svn,但希望在工具完全成熟后立即迁移到 git(不仅仅是 TortoiseGit,还有类似于 VisualSVN 提供的非常好的 Visual Studio 集成)。但我离题了...
我最近在我的 Windows 7 机器上安装了 msysgit,当使用包含的 bash 版本时,它非常慢。不仅仅是 git 操作; clear
大约需要五秒。啊啊啊!
有没有人遇到过类似的问题?
编辑:看来 msysgit 不能很好地与UAC 配合使用,可能只是在 XP 上开发或运行 Vista 或 7 导致的微小设计疏忽UAC 禁用;使用Run as administrator
启动 Git Bash 会导致我在 OS X 上看到的闪电般的速度(或者在没有网络连接的情况下启动 Git Bash 后的 7 - 请参阅@Gauthier 答案)。
编辑 2:AH HA! 查看我的答案。
【问题讨论】:
不慢 5 秒,不。它会更慢,但比 Cygwin 版本更快。 @theatrus:我刚才实际上使用了秒表。平均为 3.8 秒。所以你是对的,但还是有严重错误。 另一个 msysgit 减速是旧版本的 OpenSSH 记录在这里 darrell.mozingo.net/2011/09/29/… 查看 msysgit 的 wiki 页面:github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow Git/Bash is extremely slow in Windows 7 x64的可能重复 【参考方案1】:这可能是分析您的 Git 存储库的提示问题。您可以通过在 Git 存储库之外的某处执行“清除”来进行测试。你可以通过修补 git-completion.bash 或使用 core.filemode 来加速它。
至于 Visual Studio 集成:这是开源的。期望别人免费为你工作是不公平的。
我也觉得不在 msysGit 邮件列表上问这个问题很有趣,但现在我跑题了。
【讨论】:
不应容忍 *** 上的火焰。请尽量保持谈话更加文明 这很有趣。我的评论是带有具体技术信息的唯一评论。帮助解决问题的提议仍然开放,你知道吗?当然,我很不高兴这里提出了这个问题,在我不监控的 *** 上,并且必须由其他人向我指出。我宁愿直接听到这个问题。我不了解你,但我觉得原始项目甚至没有问题通知是不公平的。 两年后,我同意了。我太苛刻了。对不起,德肖。 git 开发者邮件列表真的很有帮助。 @Dscho,你应该明白,人们经常先在这里发帖,因为他们想检查是否有一些配置或平台问题,这不是 Git 中的错误,导致他们的问题。【参考方案2】:每当 Outlook 运行时,我的一位同事就会出现这种情况。 正在尝试杀死 Outlook 并再次测试。
您也可以尝试测试:
无需连接到任何网络, 没有运行防病毒软件, 没有任何其他程序正在运行。【讨论】:
Outlook 和防病毒似乎都没有任何效果,但是如果我禁用我的网络连接然后启动 git,即使我重新连接后它也很快(阅读:“Unix”)。有趣... 是的。并且 git bash 仍然很快(直到我关闭它并打开另一个实例)。 网络连接也对我有用。我想知道它与网络连接有什么关系。奇怪的是,它在我的家庭网络上工作得很好,但拒绝在我的办公室网络上工作。 这解决了我在全新 iMac 上使用 64 位 Windows 7 Professional 的问题。干杯! 建议的 +1 防病毒软件是我特定系统上的原因。 Windows 7 x64 终极版。遗憾的是,UAC(在别处提到)没有任何区别。谢谢大家【参考方案3】:这里的问题可能是 bash-completion(如果启用),这在 Windows 上比 Linux 慢很多。
尝试将 PS1 变量设置为像“$”这样的简单变量,看看这是否加快了速度。如果是这样,请注意在最近的 git 版本中对 bash 完成进行了一些优化。也许您需要升级。
【讨论】:
我正在运行绝对前沿的最新版本(请参阅上面关于 VonC 答案的我的 cmets)。但我会试一试。 1.7.0.2 在这种情况下不一定是最前沿的。我所说的优化已经发生在 upstream-git 中。我不确定他们是否适用于 Windows 版 Git 的 1.7.0.2 版本。【参考方案4】:Vista 或 7 上运行缓慢的解决方案似乎是使用 Run as administrator
运行 Git Bash(或为 Git Bash shortcut 禁用 UAC...或禁用 UAC entirely)。区别是白天和黑夜,在 7 上使用 git 再次很棒。
这似乎与known issue 相关,而且正如我推测的那样,XP as a development environment for msysgit 负有部分责任。
【讨论】:
很好的提示(即使是无意的:))。在带有 1.7.4 的 Windows 2008 R2 中运行“git svn clone”对我来说非常慢(SVN 中有 5000 多次提交,并且花了数周时间才得到其中的一半)......你给了我尝试的想法在其“本机”环境中,在 XP 上,它实际上非常快。谢谢! 我已禁用 UAC 并尝试以管理员身份运行,但我输入到 Git Bash 的每个命令仍然需要大约 5 秒才能运行(即使只是ls
在一个几乎空的目录中)
这个问题的答案对我有用:***.com/questions/4485059/…
将存储库移动到非系统分区也为我的团队带来了巨大的性能提升,并防止了结帐时出现的随机“无法创建文件”问题。
我尝试了很多解决方案..这个(以管理员身份运行)终于为我工作了..现在我的 git 又快如闪电了..谢谢.. :)【参考方案5】:
对我来说,问题是在 shell 提示符中使用 __git_ps1 - 我猜是由于 msysgit 中的磁盘访问速度慢。
解决方案是从 /etc/profile 的 PS1=... 行中删除 $(__git_ps1)
快速测试此解决方案是否适用:在 git shell 中,键入 导出 PS1='$' 并检查您的操作速度。
【讨论】:
谢谢!这原来是我在 Windows XP 上的问题。见***.com/q/5851611/200688 您可以让__git_ps1
处于活动状态,如果您禁用 SHOWDIRTYSTATE 和/或 SHOWUNTRACKEDFILES 设置,请参阅***.com/a/4203968/321973
这就是我在 Windows 7 上所做的一切。特别幸运的是这台机器被锁定,没有管理员权限!【参考方案6】:
这对我有用。 不要指望它会是一刀切的解决方案。
检查 bash 和 windows 中的 $HOME 环境变量。 如果它指向用户帐户,请检查用户的 Windows 配置文件/权限。 相应地更改用户帐户或 $HOME。
【讨论】:
能否详细说明这些不祥的个人资料/权限?【参考方案7】:如 this issue 中所述,在关闭 UAC 虚拟化的情况下运行(不需要完全禁用 UAC)会产生很大的不同。
This post 解释了如何关闭它(见帖子底部,只有一个注册表设置)。
在我正在连接的一个(大型)SVN 存储库中,仅进行上述更改就将“git svn rebase”所需的时间从 15 秒减少到 5 秒,提高了 3 倍。
【讨论】:
这个 issue(tracker) 已经关闭,新的 issue 是:github.com/msysgit/git/issues/94【参考方案8】:唉,“以管理员身份运行”对我不起作用 - 但正如 Kevin L 发现的那样,断开网络适配器,启动 git bash,然后重新连接工作正常。所以我把它包装在一个批处理脚本中,并在我的开始菜单中放了一个快捷方式,标记为以管理员身份运行:
netsh interface set interface "Local Area Connection" DISABLED
cd "%USERPROFILE%\Documents\Visual Studio 2010\Projects"
start cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"
netsh interface set interface "Local Area Connection" ENABLED
只要我记得我的网络暂时被切断,就可以享受。
(Win 7 Professional SP1,Git 版本 1.7.8-preview20111206)
【讨论】:
【参考方案9】:在一台新机器上尝试了这里的所有提示(包括我的另一个答案中的提示),但没有奏效,Git 仍然慢得要命。
然后我查看了病毒扫描软件(预装的):我禁用了 McAfee Security Center 的实时扫描,并且预知:git 现在速度非常快! “git svn rebase”所需的时间从 30 秒减少到 5 秒(!)。
我希望这对在 Windows 上仍然遇到 Git 缓慢问题的其他人有所帮助,我花了很多时间来解决这个问题。
【讨论】:
我的 Git Bash 之前启动也很慢,在我将 git 安装的整个路径添加到 Avast 的排除路径之后! Anti-Virus Suite,git bash 启动时间低于 0.5s 这是我的答案!!我使用 AVG 免费版。我刚刚禁用它 10 分钟,突然 veeerrrryyyy 缓慢的 bash 闪电般快。 对于那些使用 Windows Defender 的用户,您可以让它排除文件夹或进程。见support.microsoft.com/en-us/help/4028485/…【参考方案10】:我们发现,在某些用户帐户上运行时,单独的 git.exe 实例会在调用 WaitForSingleObject()
时被阻止,因此只有一个 git.exe 操作可以一次有效地运行。更改用户帐户可以解决此问题。
详情请看:https://***.com/a/13054022
【讨论】:
【参考方案11】:我在 Windows 7 x64 上作为受限用户帐户运行 git for Windows (msysgit) 已经有一段时间了。从我在这里和其他地方读到的内容来看,共同的主题似乎是缺乏管理权限和/或 UAC。由于 UAC 在我的系统上已关闭,因此它试图在程序文件目录中写入/删除某些内容的解释对我来说是最有意义的。
无论如何,我通过使用 zipinstaller 安装 git 1.8 的便携版本解决了我的问题。请注意,我必须解压缩 .7z 分发文件并将其重新打包为 zip,以便 zipinstaller 工作。我还必须手动将该目录添加到我的系统路径中。
现在的表现很好。即使它安装在 Program Files (x86) 目录中,我作为受限用户没有权限,但它似乎没有遇到同样的问题。我将此归因于便携式版本在写入/删除文件的位置更保守(可能是这种情况)或从 1.7 升级到 1.8 的事实。我不会试图确定是哪一个原因,我只想说它现在效果好多了。
【讨论】:
【参考方案12】:如果关闭 UAC 不能提高性能,请尝试关闭 luafv 驱动程序。在尝试了此页面上的几乎所有内容以及几个类似的问题之后,这对我有用。 Git 已从无法使用的缓慢变为相当不错。
打开“regedit”并找到注册表项
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv
将 Start
的值从 2 更改为 4。
我找到了有关如何禁用 luafv
here 的详细信息。请注意,我个人不知道luafv
是什么或做什么。该页面提供了各种警告,说明如果您将其关闭可能会发生的坏事,您可能应该认真对待。
编辑:下面的评论指出我弄错了(链接有正确的方式)。现在已修复。对不起那些我破坏了注册表的人:)
【讨论】:
我的默认设置为 2。还是很慢。 @imanuelc:具有讽刺意味的是,我现在也是(在新计算机上)而且速度也很慢。 这是不正确的。它应该从 2 更改为 4。2 表示自动启动。 4 表示禁用。【参考方案13】:您可能想尝试卸载 msysgit,重新启动 Windows,安装最新版本的 msysgit。它似乎对我有用。我在这里找到了这个建议:
https://***.com/a/4506192/1413941
编辑
PS 在遇到缓慢的 Git 问题之前,我已经禁用了 UAC,所以我不知道是否需要禁用 UAC 才能让 Git 快速运行。
【讨论】:
【参考方案14】:与 Windows 7 UAC 混淆的另一种方法可能是将 mysysgit 安装在 Program Files 文件夹之外。例如,代替“C:\Program Files (x86)\Git”,尝试安装在“C:\git”
我尝试摆弄“以管理员身份运行”和 UAC 控件无济于事,但放弃并重新开始安装。我之前的最大速度约为 15KiB/s,但现在超过 60kiB/s。
【讨论】:
【参考方案15】:我有 MacAffee,并告诉它从实时扫描中排除 .git 目录和所有子目录解决了性能问题。
【讨论】:
可以排除整个硬盘吗? ;-)。【参考方案16】:您可以通过运行三个命令来设置一些配置选项来显着加快 Windows 上的 Git:
git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256
注意事项:
core.preloadindex
并行执行文件系统操作以隐藏延迟(更新:在 git 2.1 中默认启用)
core.fscache
修复了 UAC 问题,因此您无需以管理员身份运行 Git(更新:在 Git for Windows 2.8 中默认启用)
gc.auto
最小化 .git/ 中的文件数
【讨论】:
这应该是现在公认的答案。像魅力一样工作! 这对我不起作用。我发出命令后,我的 git bash 仍然延迟 1-2 秒。 对我来说就像一个魅力;将我在大型回购中的 git 状态从 13 秒降至 0.7 秒git config --global core.fscache true
对我没有任何帮助;然而,git config core.fscache true
成功了。根据this,这是因为 core.fscache 是 per repo 设置。
@DavidMerriman “per repo”评论只是说明您可以在单个 repos 上更改此设置。 (所有设置都是如此,所以我根本不知道为什么会提到它。)评论并不意味着fscache
only 作为每个 repo 设置工作。全局设置适用于机器上的所有存储库,除非被每个存储库设置覆盖。【参考方案17】:
我刚刚对此进行了一段时间的故障排除,并且很难确定问题的根源。最后,我发现了两件事产生了巨大的影响:
关闭 Windows 搜索服务。这对性能产生了巨大影响。 关闭 Git 扩展。在后台打开 Git Extensions Browse 窗口会导致 Cygwin git 命令执行时间增加大约 10 个看似随机的因子。【讨论】:
【参考方案18】:正如所指出的,最好的解决方案是以管理员身份运行。然而,另一个使 git status 更快的选项至少是 trustctime = false。在此之前 git status 花了大约 30 秒,之后它与输出中显示的数量相同 - 花了 X 秒...
【讨论】:
【参考方案19】:您还可以通过更改以下 git 配置获得重要的性能提升:
git config --global status.submoduleSummary false
在 Window 7 x64 上运行简单的 git status
命令时,我的计算机运行时间超过 30 秒。定义此选项后,命令立即生效。
按照以下页面中的说明激活 Git 自己的跟踪帮助我找到了问题的根源,这可能在您的安装中有所不同: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
【讨论】:
以上是关于Msysgit bash 在 Windows 7 中速度非常慢的主要内容,如果未能解决你的问题,请参考以下文章