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 中速度非常慢的主要内容,如果未能解决你的问题,请参考以下文章

windows下GIt Bash中文乱码怎么解决

msysGit 类 sudo 命令

git bash ssh-keygen 文档 [关闭]

如何在 Windows 中运行 git-p4?

.sh 文件的 Git bash 选项卡完成

如何用git bash把代码传到git上?