__git_ps1 чрезвычайно медленно работает в дереве ядра - PullRequest
27 голосов
/ 16 ноября 2010
$ 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 ]

21 голосов
/ 17 ноября 2010

Оказалось, что это сочетание двух вещей:

Я использовал

export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true

по умолчанию. который оказался непригодным для дерева размером с ядро. Удаление этих опций удаляет немного приятной функциональности из __git_ps1, но, по крайней мере, теперь возвращается мгновенно. (Полезный урок - попробуйте что-нибудь из недавно созданной учетной записи пользователя.)

Кроме того, жесткий диск на моей рабочей машине просто медленный, так что это не было проблемой само по себе; это только первый раз, когда он действительно вырвался из моего ведома.

7 голосов
/ 22 февраля 2011

, чтобы узнать, где именно для этого нужно время:

bash -x

тогда

__ git_ps1

Мой занимал время для

++ git ls-files --others --exclude-standard

там были перечислены все файлы моего дома. даже на быстром ssd это заняло довольно много времени.

4 голосов
/ 24 апреля 2013

Чтобы это исправить, просто добавьте это в ваш .bashrc

export GIT_PS1_SHOWDIRTYSTATE=
export GIT_PS1_SHOWUNTRACKEDFILES=

Отключит поиск некоторых файлов.

3 голосов
/ 16 ноября 2010

Есть ли в репо подмодули?См. Замечание относительно "git status сейчас очень медленно" (с подмодулями) в этой публикации из-за изменения, внесенного в 1.7.0:

Исправление / обходпередать «--ignore-submodules» в «git status», как отмечено в обновлении ниже раздела: «Обновление: спасибо VonC, который указывает в комментариях ниже, что в git 1.7.2 теперь есть« –ignore »Опция -submodules »для отображения состояния, которое может восстановить старое поведение, а также предоставляет полезную опцию, что только измененные файлы (не неотслеживаемые файлы) приводят к тому, что подмодуль отображается как грязный.

1 голос
/ 16 ноября 2010

как насчет обновления git-creation.bash до последней версии http://git.kernel.org/?p=git/git.git;a=tree;f=contrib/completion;h=525eddf7e4c03acc7b3f01f09f45515cf63cd9b4;hb=master

Проблема локальная для этого репозитория ядра или общая?

git fsck --full показывает что-нибудь?

1 голос
/ 16 ноября 2010

не могли бы вы попробовать мою версию git PS1 это быстрее или одинаково медленно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...