Msysgit bash 在 Windows7中慢得可怕

我喜欢 git,并且经常在家里使用它。在工作中,我们在 Windows 上使用 svn,但是一旦工具完全成熟,我们希望尽快迁移到 git (不仅仅是 TortoiseGit,还有类似于 VisualSVN提供的非常好的 Visual Studio 集成)。但我跑题了。

我最近在我的 Windows7机器上安装了 Msysgit,当使用所包含的 bash 版本时,它的 糟透了速度很慢。不仅仅是 git 操作; clear需要大约5个 几秒钟。啊!

有人遇到过类似的问题吗?


编辑 : msysgit 在 UAC上表现不佳,可能只是在 XP 上开发或者在禁用 UAC 的情况下运行 Vista 或7导致的一个微小的设计疏忽; 使用 Run as administrator启动 Git Bash 会导致我在 OS X 上看到的闪电般的速度(或者在启动 Git Bash 后在7上进行网络连接——参见@Gauthier 的回答)。

编辑2 : 啊哈!看我的答案。

45772 次浏览

这可能与分析 Git 存储库的提示有关。您可以通过在 Git 存储库之外的地方执行“ clear”来进行测试。您可以通过修补 git 完成来加速它。Bash 或通过使用 core.filemode 进行处理。

至于 VisualStudio 集成: 这是开放源码。指望别人免费为你工作是不公平的。

我还发现不问 msysGit 邮件列表上的问题很有趣,但现在 离题了。

我的一个同事在 Outlook 运行时就有这种行为。 试试杀人的眼光,再试一次。

你也可以尝试测试:

  • 没有连接到任何网络,
  • 没有运行杀毒软件,
  • 没有任何其他程序运行。

这里的问题是,如果启用了 bash 完成,那么 也许吧的问题就是 bash 完成,这在 Windows 上要比 Linux 慢得多。

尝试将 PS1-变量设置为像“ $”这样的简单值,看看这样是否能加快速度。如果是这样,请注意在最近的 git 版本中对 bash 完成进行了一些优化。也许你需要升级一下。

在 Vista 或7中,缓慢的解决方案似乎是使用 Run as administrator运行 Git Bash (或者禁用 Git Bash 捷径的 UAC... 或者禁用 UAC 翻译: 奇芳,校对: 奇芳,校对: 奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳)。区别在于白天和黑夜,在7上使用 git 再次令人敬畏。

这似乎与 已知问题有关,正如我推测的那样,XP 作为 msysgit 的开发环境是部分原因。

对我来说,问题在于 shell 提示符中的 use _ _ git _ ps1——我猜是由于 msysgit 中磁盘访问速度较慢。

解决方案是从/etc/profile 中的 PS1 = ... 行中删除 $(_ _ git _ PS1)

快速测试这个解决方案是否适用: 在 git shell 中,键入 Export PS1 = “ $” 检查你们的运作速度。

这招对我管用 不要指望它会是一个一刀切的解决方案。

检查 bash 和 windows 中的 $HOME 环境变量。 如果它指向用户帐户,请检查用户的 Windows 配置文件/权限。 相应地更改用户帐户或 $HOME。

正如在 这个问题中发现的那样,关闭 UAC 虚拟化运行(不需要完全禁用 UAC)会产生很大的不同。

这篇文章 解释了如何关闭它(参见文章的底部,只有一个注册表设置)。

在我正在连接的一个(大型) SVN 回购中,仅上述更改就将“ git SVN rebase”所需的时间从15s 减少到5s,这是一个因素3的改进。

遗憾的是,“以管理员身份运行”并不适合我——但是正如 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 version 1.7.8-preview20111206)

在一台新机器上尝试了几乎所有的提示(包括我另一个答案中的提示) ,但是没有用,Git 仍然慢得要命。

Then I had a look at the virusscanning software (that was pre-installed) : I 破坏了迈克菲安全中心的实时扫描, and presto: git is blazing fast now! Time needed for "git svn rebase" dropped from 30s to 5s (!).

我希望这对其他仍然有 Git 在 Windows 上运行速度慢的问题的人有所帮助,我花了几个小时来解决这个问题。

我们发现,当在某些用户帐户上运行时,对 WaitForSingleObject()的调用阻塞了单独的 git.exe 实例,因此只有一个 git.exe 操作可以同时有效地运行。更改用户帐户可以解决这个问题。

详情请浏览: https://stackoverflow.com/a/13054022

我曾经遇到过同样的问题,在 Windows7x64上以受限用户帐户运行 git (msysgit)。从我在这里和其他地方读到的资料来看,共同的主题似乎是缺乏管理特权和/或 UAC。由于 UAC 在我的系统上是关闭的,它试图在程序文件目录中写/删除某些内容的解释对我来说最有意义。

无论如何,我已经通过使用 zipinstaller 安装了 git 1.8的可移植版本,从而解决了我的问题。注意,为了使 zipinstaller 工作,我必须解压缩.7 z 发行版文件并将其重新打包为 zip。我还必须手动将该目录添加到系统路径中。

现在演出很好。尽管它被安装在 Program Files (x86)目录中,作为一个受限用户,我没有这个权限,但它似乎没有遇到同样的问题。我认为这要么是因为可移植版本在写/删除文件方面比较保守(可能是这种情况) ,要么是因为从1.7升级到1.8。我不打算试图确定哪一个是原因,只要说它现在工作 很多更好。

如果关闭 UAC 不能提高性能,试着关闭 Luafv 驱动程序。在尝试了这个页面上的几乎所有东西和几个类似的问题之后,这个方法对我起作用了。Git 已经从极其缓慢变得相当不错了。

打开“ regedit”并找到注册表项

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Start的值从2更改为4。

我找到了关于如何禁用 luafv 给你的细节。请注意,我个人并不知道 luafv是什么,也不知道它是做什么的。这个页面给出了各种关于关闭它可能发生的坏事情的警告,您可能应该认真对待这些警告。

编辑: 下面的评论指出,我得到了这个错误的方式(链接有它的正确的方式)。现在修好了。对那些被我破坏了注册表的人表示歉意:)

您可能想尝试卸载 msysgit,重新启动窗口,安装 msysgit 的最新版本。看起来对我很有效。我在这里发现了这个建议:

Https://stackoverflow.com/a/4506192/1413941

剪辑

PS 我已经禁用了 UAC 之前,我遇到了缓慢的 Git 问题,所以我不知道禁用 UAC 是否需要或不让 Git 得到快速。

另一种方法可能是将 mysysgit 安装在 Program Files 文件夹之外。例如,不要使用“ C: Program Files (x86) Git”,尝试在“ C: Git”中安装

我尝试摆弄“作为管理员运行”和 UAC 控件,但无济于事,但放弃了,重新开始一个新的安装。我以前的最大速度是15KiB/s,但现在已经超过60KiB/s 了。

我有 MacAffee,并告诉它从实时扫描中排除. git 目录和所有子目录来解决性能问题。

通过运行三个命令来设置一些配置选项,可以大大加快 Windows 上 Git 的速度:

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

备注:

  • core.preloadindex并行执行文件系统操作以隐藏延迟(update: 在 git 2.1中默认启用)

  • core.fscache修复了 UAC 问题,因此您不需要以管理员身份运行 Git (更新: 在 Windows 2.8的 Git 中默认启用)

  • gc.auto最小化. git/中的文件数

我刚刚解决了这个问题有一段时间了,很难找到问题的根源。最后,我发现了两件具有戏剧性影响的事情:

  • 关闭 Windows 搜索服务。这对性能产生了戏剧性的影响。
  • 关闭 Git 扩展。在后台打开 Git 扩展浏览窗口导致 Cygwin Git 命令执行时间增加了一个看似随机的因子,最多可达10。

正如所指出的,最好的解决方案是以管理员身份运行。然而,另一个选择,使 Git 状态快,至少,是 信任时间 = 虚假。在此之前,Git 状态需要大约30秒,在此之后,它是相同的数量,显示在输出-它花了 X 秒..。

您还可以通过更改以下 git 配置来获得重要的性能提升:

git config --global status.submoduleSummary false

在 Windows7x64上运行简单的 git status命令时,我的计算机运行时间超过30秒。定义此选项后,命令立即生效。

激活 Git 自己的跟踪,正如下面介绍的那样,帮助我找到了问题的根源,这可能与您的安装有所不同: Https://github.com/msysgit/msysgit/wiki/diagnosing-why-git-is-so-slow