__git_ps1在内核树中非常慢

时间:2010-11-16 07:33:17

标签: git bash

$ 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

6 个答案:

答案 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会透露什么吗?