git bash автозаполнение медленное на windows 7 x64

У меня есть две машины, на которых автозаполнение git bash мучительно медленное. Когда я нажимаю вкладку, для завершения имени файла может потребоваться от 8 до 10 секунд. Кажется, это происходит только тогда, когда автозаполнение является частью команды git. Автозаполнение для cd работает нормально. Фактическое выполнение команды git работает нормально.

Я использую git version 1.8.3-preview20130601

$ git count-objects -vH
count: 9
size: 10.23 KiB
in-pack: 2488
packs: 1
size-pack: 18.68 MiB
prune-packable: 0
garbage: 0
size-garbage: 0 bytes

Что может быть причиной этого? Есть ли возможное решение?

РЕДАКТИРОВАТЬ: я обновился до Git (version 1.8.4-preview20130916), и проблема все еще сохраняется. Я заметил, что при запуске оболочки bash в ConEmu внизу во время долгой паузы отображается команда uniq.exe. Кажется, что вызов этого исполняемого файла отнимает время.

РЕДАКТИРОВАТЬ: Обновление до git version 1.9.0.msysgit.0 решило большую часть проблемы. Задержка теперь составляет всего 1-2 секунды. Другие команды, такие как cd, по-прежнему почти мгновенны (‹ 0,5 с). Я также больше не вижу, чтобы uniq.exe работало, только sh.exe.


person TwistedTech    schedule 12.11.2013    source источник
comment
Насколько велик ваш репозиторий?   -  person Anshul Goyal    schedule 12.11.2013
comment
Не очень, 46 коммитов. du -sh .git дает 19 миллионов   -  person TwistedTech    schedule 12.11.2013
comment
Если вы используете Visual Studio, пытались ли вы закрыть решение? Кажется, это работает для меня, когда я начинаю испытывать медлительность, и у меня почти такая же настройка, которую вы описываете.   -  person carmbrester    schedule 11.01.2014


Ответы (3)


Git 2.13 (второй квартал 2017 г.) должен улучшить завершение Git bash, потому что завершение ссылок для большого количества ссылок было ускорено, частично за счет отказа от неоднозначных ссылок и частично за счет исключения большей части обработки оболочки между 'git for-each-ref ' и 'ls-remote' и средство завершения Bash.

См. коммит 227307a, зафиксировать 745d655, , коммит 400a755, коммит 824388d, зафиксировать e8cb023, зафиксировать e896369, зафиксировать b2b6811, зафиксировать 3ad8ea7 , коммит aed3881, зафиксировать aa0644f, noremiter="norelfol" 2ea328a, commit 15b4a16 (23 марта 2017 г.) и коммит c977eef (03 февраля 2017 г.), автор SZEDER Gábor (szeder).
(объединено Хунио С. Хамано -- gitster -- в commit bf65060, 30 марта 2017 г.)

Например:

completion: ускорить завершение ветвей и тегов

Измените __git_heads() и __git_tags() и несколько точек вызова, которые у них есть, чтобы мы могли позволить 'git for-each-ref' выполнять всю тяжелую работу, и выходные данные этих функций не будут нуждаться в дальнейшей обработке или фильтрации перед передачей в Bash, что приведет к более быстрому переходу и тегу. завершение. Это некоторые из тех же трюков, которые использовались в предыдущих коммитах для ускорения завершения ссылок, а именно:

  • Расширьте обе функции, чтобы принимать параметры префикса, текущего слова и суффикса, все необязательные и все пустые по умолчанию, чтобы сохранить поведение без параметров неизменным.

  • Укажите соответствующие шаблоны подстановки для 'git for-each-ref', чтобы перечислить только ветви или теги, соответствующие заданному параметру текущего слова.

  • Измените «git for-each-ref --format=<...>», чтобы включить данный префикс и суффикс.

  • Настройте все callsites, чтобы указать правильный префикс, параметры текущего слова и суффикса, а также заполнить COMPREPLY с помощью __gitcomp_direct().


Примечание. Производительность завершения имени файла улучшается с Git 2.18 (второй квартал 2018 г.): см. «Git bash-completion с поддержкой имени файла? "

person VonC    schedule 16.04.2017
comment
Я видел очень медленное автозаполнение в Windows 7, и оно действительно кажется намного лучше после установки git 2.13. (Автозаполнение имен веток сократилось с 30 до пары.) - person starwed; 11.05.2017

У меня все еще была проблема с медленным автозаполнением только для команд git, используя версию 1.9.5. Автозаполнение на корневом уровне могло занимать 8 секунд, хотя на более низких уровнях с меньшим количеством файлов это происходило быстрее.

Наконец-то я исправил проблему с информацией, найденной здесь: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow

Установив git config core.fscache true для моего репозитория, автозаполнение работает быстрее для многих команд, таких как add и diff, хотя и не для всех, таких как rm. Надеюсь, это поможет.

person David Merriman    schedule 29.01.2015
comment
Это дает значительное улучшение при работе с большими (.git/1,3G) репозиториями в git 2.7 в Windows 7. - person piedar; 26.09.2016
comment
Хотя это может помочь в Windows, git-completion.bash чертовски медленный (был?) и в Linux: stackoverflow.com/questions/9810327/ - person MarcH; 03.10.2017

Это известная проблема со стабильной версией ConEmu.

На странице ConEmu:

Отказ от ответственности №2

Если вы заметили задержки при выполнении пакетов или команд (из cmd/git/bash/и т. д.), просто обновитесь до последней альфа-сборки или снимите флажок «Внедрить ConEmuHk". Подробнее читайте в проблеме 526.

person alextercete    schedule 06.03.2014
comment
Когда я задал этот вопрос, я еще не использовал ConEmu. Я обнаружил его позже и заметил имя exe, поэтому решил включить его. - person TwistedTech; 22.05.2014