Подтвердить что ты не робот

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

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

EDIT: я обновился до Git (version 1.8.4-preview20130916), и проблема все еще сохраняется. Я заметил, что при запуске оболочки bash в ConEmu команда, отображаемая внизу во время длительной паузы, uniq.exe. Кажется, что вызов этого исполняемого файла - это то, что жует время.

EDIT: обновление до git version 1.9.0.msysgit.0 облегчило большую часть проблемы. Задержка теперь составляет от 1 до 2 секунд. Другие команды, такие как cd, все еще почти мгновенно (< 0,5 с). Я также больше не вижу uniq.exe, просто sh.exe.

4b9b3361

Ответ 1

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

См. commit 227307a, совершить 745d655, commit fef56eb, commit 400a755, commit 824388d, совершить e8cb023, commit e896369, commit b2b6811, совершить 3ad8ea7, совершить aed3881, commit aa0644f, commit 2ea328a, commit 15b4a16 (23 марта 2017 г.) и совершить c977eef (03 февраля 2017 г.) SZEDER Gábor (szeder).
(слияние Junio ​​C Hamano - gitster - в commit bf65060, 30 марта 2017 г.

Например:

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

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

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

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

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

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

Ответ 2

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

От страница ConEmu:

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

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

Ответ 3

У меня все еще была проблема с медленным автозаполнением только для команд 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. Надеюсь, это поможет.