__git_ps1在内核树中非常慢

Mar*_*llo 27 git bash

$ 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 =  36.42 MB/sec
Run Code Online (Sandbox Code Playgroud)

合作伙伴

$ 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
Run Code Online (Sandbox Code Playgroud)

其他差异:同事正在运行git 1.6.5,我正在运行1.7.1

Mar*_*llo 21

结果证明是两件事的组合:

我在用

export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true
Run Code Online (Sandbox Code Playgroud)

默认情况下.事实证明,它在内核大小的树上无法使用.删除这些选项会从__git_ps1中删除一些不错的功能,但至少现在会立即返回.(有用的课程 - 在其他任何事情之前从新创建的用户帐户中尝试一些东西.)

另外,我的工作机器上的硬盘速度很慢,所以这本身并不是一个git问题; 这是我第一次在我注意到的时候真正地闯入了自己.

  • 你可以使用`git config --global bash.showDirtyState true`并仅使用`git config bash.showDirtyState false`覆盖内核树.对于未跟踪的文件没有这样的设置(在git 1.7.3.2上),但它也应该很容易实现 (5认同)

nic*_*las 7

要知道这需要花费多少时间:

bash -x

然后

__git_ps1

我正在抽出时间

++ git ls-files --others --exclude-standard
Run Code Online (Sandbox Code Playgroud)

它列出了我的gitted home drectory的所有文件.即使在快速的ssd上,也花了很长时间.


Fel*_*llo 5

要解决此问题,只需将其添加到您的 .bashrc 中

export GIT_PS1_SHOWDIRTYSTATE=
export GIT_PS1_SHOWUNTRACKEDFILES=
Run Code Online (Sandbox Code Playgroud)

将禁用某些文件查找。