在一个小项目的开发过程中,我一直在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个文件.
在我的Windows机器git stash上每次调用都有大约3.5秒的开销,这为我的git commit hook添加了大约7秒.
linux(同一台机器)下的相同命令大约需要0.01秒.性能问题也适用于空存储库.
core.fscache 被设置为 truecore.preloadindex 被设置为 truegc.auto 被设置为 256运行 GIT_TRACE=true git stash list
16:58:16.844591 git.c:563 trace: exec: 'git-stash' 'list'
16:58:16.844591 run-command.c:336 trace: run_command: 'git-stash' 'list'
16:58:19.699591 git.c:350 trace: built-in: git 'rev-parse' '--git-dir'
16:58:19.859591 git.c:350 trace: built-in: git 'rev-parse' '--git-path' 'objects'
16:58:20.069591 git.c:350 trace: built-in: git 'rev-parse' '--show-toplevel'
16:58:20.154591 git.c:350 trace: built-in: git 'rev-parse' '--git-path' 'index'
16:58:20.244591 git.c:350 trace: built-in: git 'config' …Run Code Online (Sandbox Code Playgroud) $ time __git_ps1
((v2.6.33.4))
real 0m1.467s
user 0m0.864s
sys 0m0.564s
Run Code Online (Sandbox Code Playgroud)
这让我的提示无法使用; 但另一方面,轻松放弃这个功能太有用了.知道为什么它运行如此缓慢以及我能做些什么呢?
设置细节:
$ uname -a
Linux martin-laptop 2.6.35-22-generic #35-Ubuntu SMP Sat Oct 16 20:36:48 UTC 2010 i686 GNU/Linux
$ git --version
git version 1.7.1
$ du -sh .
876M .
Run Code Online (Sandbox Code Playgroud)
我怀疑我的机器有什么东西,因为在我的同事的盒子里,在我克隆的内核树中,同样的命令立即返回
$ time __git_ps1
((v2.6.33.4))
real 0m0.039s
user 0m0.008s
sys 0m0.016s
Run Code Online (Sandbox Code Playgroud)
添加hdparm输出:
矿
$ sudo hdparm -tT /dev/sda4
/dev/sda4:
Timing cached reads: 1542 MB in 2.00 seconds = 772.35 MB/sec
Timing buffered disk reads: 110 MB in 3.02 seconds …Run Code Online (Sandbox Code Playgroud) 我正在开发一个版本控制系统是SVN的项目,我想使用git.我做了一个git svn克隆,但git status工作速度非常慢(大约8分钟).存储库有大约63000个文件,其中大多数是git忽略的库.这是正常的吗?我做了git prune && git gc一个清理无法到达的对象和垃圾收集.我也做了一git repack -Adf件事,但这让事情变得更糟.它需要更长的时间(超过20分钟).
我究竟做错了什么?这是一个visual studio项目,我认为该.gitignore文件不包含正确的东西.是否有可能确切地找出从Visual Studio构建生成哪些文件以及哪些文件必须进行版本控制?
如果.gitignore文件不是问题,我怎样才能让我git status更快,对于6500个文件(大约10GB)的项目,使用git工作的速度是否正常?
Git对我的工作流程至关重要.我在带有3GB内存的四核机器上运行Windows XP上的MSYS Git,通常它具有响应性和灵活性.
突然出现一个问题,从Git Bash命令提示符运行任何命令需要> 30秒,包括ls或cd.有趣的是,从bash提示看起来喜欢ls运行得相当快,然后我可以看到输出ls,但是然后返回提示需要大约30秒.如果我切换到Windows命令提示符(通过cmd从开始菜单运行)git相关命令也需要永远,甚至只是运行.例如git status,在发生任何事情之前可能需要将近一分钟.有时这些过程根本无法完成.
请注意,我有"MSYS的Git"安装以及定期的"MSYS"对于喜欢的东西MinGW和make.
我认为问题与sh.exe位于C:\Program Files\Git\bin.当我ls从bash提示符运行时,或者当我git从Windows提示符调用时,任务管理器最多显示四个sh.exe进程的进程实例.
在这里,我等待ls返回,你可以看到任务管理器已经git.exe运行了四个实例sh.exe:

如果我ctrl-c在中间,ls我有时会得到包括以下内容的错误:
sh.exe": fork: Resource temporarily unavailable
0 [main] sh.exe" 1624 proc_subproc: Couldn't duplicate my handle<0x6FC> fo
r pid 6052, Win32 error 5
sh.exe": fork: Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)
或者git status:for :git status …
我在Ubuntu上运行一个脚本,并测试它的时间:
$ time ./merger
./merger 0.02s user 0.03s system 99% cpu 0.050 total
Run Code Online (Sandbox Code Playgroud)
它花了不到1秒钟.但如果我使用cygwin:
$ time ./merger
real 3m22.407s
user 0m0.367s
sys 0m0.354s
Run Code Online (Sandbox Code Playgroud)
它花了超过3分钟.为什么会这样?我该怎么做才能提高cygwin的执行速度?
只需git在命令提示符下(powershell)输入,需要2.5秒,直到它返回帮助消息.
我正在使用git for windows release,安装在C:\Program Files (x86)\Git.当我使用cygwin(通过babun)时,我收到一个错误:Hint: your prompt is very slow. Check the installed 'BLODA' software.也许这是相关的?如果是,我正在使用企业笔记本电脑,因此无法卸载防病毒软件或驱动程序软件,还有其他选择吗?
我的电脑里有一个git的小问题,我创建了一个新的文件夹并且我启动了Git Bash,但它加载git需要很长时间,因为它会显示命令提示符,但它需要一段时间才能获得git行出现.
这有什么线索吗?
谢谢
我在Windows 7,64位,并已安装msysgit以使用我的github存储库.在我的旧笔记本电脑(32位,也是Windows 7)上,git运行没有问题,但现在git bash运行缓慢(我输入一个命令,它需要几秒钟来实际显示,逐个字符).当我尝试推送更改时,它会间歇性地工作,但通常会出现一个对话框,说"ssh.exe已停止工作......".我单击取消,然后重试该命令.最终,它工作,要求我的身份验证代码.一旦进入该步骤,它就会毫无问题地推动.这就是问题的关键所在.
所以基本上,我的问题是:
我重新安装了Windows,因为这个问题突然出现,并没有解决它.