__git_ps1 чрезвычайно медленный в дереве ядра
$ 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
Ответы
Ответ 1
Это оказалось комбинацией двух вещей:
Я использовал
export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true
по умолчанию. который оказался непригодным для дерева по размеру ядра. Удаление этих параметров устраняет немного приятных функциональных возможностей от __git_ps1, но по крайней мере оно возвращается мгновенно. (Полезный урок - попробуйте материал из недавно созданной учетной записи пользователя перед чем-либо еще.)
Кроме того, жесткий диск на моем рабочем компьютере просто медленный, поэтому проблема не была git сама по себе; это был первый раз, когда он действительно навязал мое уведомление.
Ответ 2
чтобы узнать, где именно это занимает время, которое вы можете сделать:
bash -x
затем
__ git_ps1
Мина брала время на
++ git ls-files --others --exclude-standard
он перечислял все файлы моего встроенного дома.
даже на быстром ssd, это заняло довольно много времени.
Ответ 3
Чтобы исправить это, просто добавьте это в свой .bashrc
export GIT_PS1_SHOWDIRTYSTATE=
export GIT_PS1_SHOWUNTRACKEDFILES=
Отключит просмотр файлов.
Ответ 4
Есть ли у репо подмодули? См. Замечание "git status
сейчас очень медленно" (с подмодулями) в этот пост из-за изменения, внесенного в 1.7.0:
Исправление/обход - передать "--ignore-submodules
" в "git status
", как указано в обновлении, приведенном ниже в разделе "Обновление: благодаря VonC, который указывает в комментариях ниже, что в git 1.7.2 теперь есть опция" -ignore-subodules "для статуса git, которая может восстановить старое поведение, а также предоставляет полезную опцию, в которой только измененные файлы (без файлов без следа) приводят к тому, что подмодуль будет отображаться как грязный."
Ответ 5
Можете ли вы попробовать мою версию git PS1, это быстрее или равномерно?
Ответ 6
как насчет обновления git -completion.bash до последней версии
http://git.kernel.org/?p=git/git.git;a=tree;f=contrib/completion;h=525eddf7e4c03acc7b3f01f09f45515cf63cd9b4;hb=master
Является ли проблема локальной для этого репо сервера или общего?
Открывает ли git fsck --full
что-нибудь?