Windows 7 x64上的git bash自动完成缓慢

时间:2013-11-12 17:35:19

标签: git bash zsh git-bash

我有两台机器,其中git bash auto complete非常慢。当我点击标签时,文件名可能需要8到10秒才能完成。仅当自动完成是git命令的一部分时,才会发生这种情况。 cd的自动完成工作正常。 git命令的实际执行运行正常。

我正在使用git version 1.8.3-preview20130601

$ git count-objects -vH
count: 9
size: 10.23 KiB
in-pack: 2488
packs: 1
size-pack: 18.68 MiB
prune-packable: 0
garbage: 0
size-garbage: 0 bytes

可能导致这种情况的原因是什么?有没有可能的解决办法?

编辑:我更新到Git (version 1.8.4-preview20130916),问题仍然存在。我注意到在ConEmu中运行bash shell时,在长时间停顿期间显示在底部的命令是uniq.exe。似乎对可执行文件的调用正在扼杀时间。

编辑:更新到git version 1.9.0.msysgit.0缓解了大部分问题。延迟现在只有1到2秒。其他命令如cd几乎是即时的(<0.5s)。我也看不到uniq.exe正在运行,只是sh.exe

3 个答案:

答案 0 :(得分:5)

Git 2.13(2017年第二季度)应该改进Git bash完成,因为大量refs的refs完成已加快,部分原因是放弃消除模糊的引用,部分消除了大部分的shell处理。 git for-each-ref&#39;和&#39; ls-remote&#39;和Bash的完成设施。

请参阅commit 227307acommit 745d655commit fef56ebcommit 400a755commit 824388dcommit e8cb023commit e896369,{{3} },commit b2b6811commit 3ad8ea7commit aed3881commit aa0644fcommit 2ea328a(2017年3月23日)和commit 15b4a16(2017年2月3日){ {3}}。
commit c977eef于2017年3月30日SZEDER Gábor (szeder)合并)

例如:

  

completion:加快分支和标记完成

     

修改__git_heads()__git_tags()以及他们拥有的几个来电,   所以我们可以让git for-each-ref&#39;做所有艰苦的工作和这些   功能&#39;输出不需要任何进一步的处理或过滤   在被移交给Bash之前,导致更快的分支和标记   完成。这些是前面使用的一些相同的技巧   承诺加快裁判完成,即:

     
      
  • 将两个函数扩展为接受前缀,当前字和后缀   位置参数,所有可选,默认为全空   保持无参数行为不变。

  •   
  • 为&#39; git for-each-ref&#39;指定适当的通配模式。至   仅列出与给定当前单词匹配的分支或标签   参数。

  •   
  • 修改&#39; git for-each-ref --format=<...>&#39;包括给定的   前缀和后缀。

  •   
  • 调整所有callites以指定正确的前缀,当前单词   和后缀参数,并使用填充COMPREPLY   __gitcomp_direct()

  •   

注意:使用Git 2.18(2018年第二季度)可以提高文件名完成的性能:请参阅&#34; Junio C Hamano -- gitster --&#34;

答案 1 :(得分:4)

这是ConEmu的稳定版本的已知问题。

来自the ConEmu page

  

免责声明#2

     

如果您在执行批次或命令时发现滞后(来自   cmd / git / bash / etc。)只需升级到最新的alpha版本或取消选中   选项“Inject ConEmuHk”。请阅读Issue 526了解详情。

答案 2 :(得分:4)

我仍然遇到使用版本1.9.5的git命令缓慢自动完成问题。根级别的自动完成可能需要8秒,但在较低级别的文件较少时会更快。

我最终使用此处的信息解决了问题:https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow

通过为我的存储库设置git config core.fscache true,自动完成功能可以为许多命令运行得更快,例如adddiff,但不是全部,例如rm。我希望有所帮助。