$ time __git_ps1
((v2.6.33.4))
real 0m1.467s
user 0m0.864s
sys 0m0.564s
这使我的提示无法使用;但另一方面,轻松放弃这个功能太有用了。知道为什么它运行如此缓慢以及我能做些什么呢?
设置详情:
$ 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 .
我怀疑我的机器有什么东西,因为在我的同事的盒子里,在我克隆的内核树中,同样的命令立即返回
$ time __git_ps1
((v2.6.33.4))
real 0m0.039s
user 0m0.008s
sys 0m0.016s
添加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 = 36.42 MB/sec
同事的
$ sudo hdparm -Tt /dev/sda6
/dev/sda6:
Timing cached reads: 1850 MB in 2.00 seconds = 926.03 MB/sec
Timing buffered disk reads: 210 MB in 3.02 seconds = 69.53 MB/sec
其他差异:同事正在运行git 1.6.5,我正在运行1.7.1
答案 0 :(得分:21)
原来是两件事的组合:
我正在使用
export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true
默认情况下。事实证明,它在内核大小的树上无法使用。删除这些选项会从__git_ps1中删除一些不错的功能,但至少现在会立即返回。 (有用的课程 - 先从新创建的用户帐户中尝试其他内容。)
另外,我的工作机器上的硬盘速度很慢,所以这本身并不是一个git问题;这是我第一次在我注意到的时候真正地闯入了自己。
答案 1 :(得分:7)
知道这需要花费多少时间:
bash -x
然后
__ git_ps1
我的时间花了很多时间
++ git ls-files --others --exclude-standard
它列出了我的gitted home drectory的所有文件。 即使在快速的ssd上,也需要相当长的时间。
答案 2 :(得分:4)
要解决此问题,只需在.bashrc
中添加export GIT_PS1_SHOWDIRTYSTATE=
export GIT_PS1_SHOWUNTRACKEDFILES=
将禁用某些文件查找。
答案 3 :(得分:3)
回购有子模块吗?由于1.7.0中引入的更改,请参阅this post中关于“git status
现在非常慢”(包含子模块)的说法:
修复/解决方法是将“--ignore-submodules
”传递给“git status
”,如以下部分更新中所述:“更新:感谢VonC,他在评论中指出在git 1.7.2下面现在有一个git status的“-ignore-submodules”选项可以恢复旧的行为,并提供有用的选项,只有更改的文件(不是未跟踪文件)才会导致子模块显示为脏。“
答案 4 :(得分:1)
您可以尝试我的git PS1版本是更快还是同样慢?
答案 5 :(得分:1)
如何将git-completion.bash更新为最新版本 http://git.kernel.org/?p=git/git.git;a=tree;f=contrib/completion;h=525eddf7e4c03acc7b3f01f09f45515cf63cd9b4;hb=master
此内核repo或一般问题是本地的吗?
git fsck --full
会透露什么吗?