2012-03-21 7 views
24

Автозаполнение Git's tab полезно для небольших проектов, но в настоящее время я работаю над двумя большими проектами, которые используют git, и для них это хуже, чем бесполезно. Всякий раз, когда я печатаю, скажем, git add forms<tab>, git занимает 20 секунд или больше, чтобы найти файл (в этом примере, forms.py), и в этот промежуток времени я не могу ничего сделать в терминале. Есть ли способ отключить функцию автозаполнения или каким-то образом сделать это быстрее?Завершение автозавершения ZSH для git занимает значительное количество времени, могу ли я отключить его или оптимизировать?

+0

Какую ** оболочку ** вы используете? – Johnsyweb

+0

Я использую zsh, и я бы хотел использовать стандартное автозаполнение zsh, а не git's. – haroba

+0

Кстати, 'set -x' достаточно, чтобы увидеть/доказать, что автозаполнение занимает слишком много времени. – MarcH

ответ

47

Это не git auto, заполняющий имена файлов, это ваша оболочка. У вас такая же задержка, когда вы делаете, например. «Кошачьи формы < tab>»?

Заканчивать этот пост с подобными проблемами:

http://talkings.org/post/5236392664/zsh-and-slow-git-completion

Это сообщение предлагает добавить следующие строки в .zshrc:

__git_files() { 
    _wanted files expl 'local files' _files  
} 

EDIT: Вот оригинальный текст этого поста

Я нашел много сообщений, касающихся жалоб о том, насколько болезненно медленным gi t автозаполнение может быть в больших хранилищах. Были различные предлагаемые исправления и предложения для загрузки последних zsh. Может быть, один из них будет работать, но все, что я действительно хочу, - это , чтобы заполнить имена ветвей и файлов, как они есть в файле . Я не нашел никаких предложений о том, как получить такое поведение. Я понял это для себя. Я думал, что поделюсь этим для всех , которые могут извлечь из этого выгоду. Я просто добавил следующее в мой файл .zshrc :

__git_files() { 
    _wanted files expl 'local files' _files } 

Теперь я могу запускать команды Git и получить почти мгновенное завершение пока еще получения завершения файла аналогично тому, что Ls обеспечит.

+0

Это происходит мгновенно. – haroba

+0

Если я добавлю файл в .gitignore, завершение вкладки после того, как команда git больше не работает с этим файлом. – haroba

+0

Хорошо. Пожалуйста, проверьте мой пересмотренный ответ. Вероятно, это связано с сообщением между вашей оболочкой и git. – ralphtheninja

1

Одно очень быстрое и грязное решение - удалить следующий файл, отвечающий за автозаполнение.

/usr/local/git/contrib/completion/git-completion.bash 
+1

Я не могу этого сделать, поскольку я не единственный пользователь на этом сервере, а другие могут или могут не хотят использовать git autocompletion. Кажется странным, что git не будет легко исправить что-то, что, если я что-то не понимаю, происходит со всеми git-проектами, когда они становятся большими. – haroba

+2

@Aqwis: Не используйте этот файл в сценарии запуска оболочки. – mipadi

+1

Это не источник в сценарии запуска оболочки. – haroba

4

У меня нет опыта работы с zshell, но я получил этот ответ на другом форуме. Вы должны включить эту строку в файл .zshrc:

compdef -d git 
+2

К сожалению, это приводит к сбою завершения команд git. Например, если вы наберете 'git ch ', он не даст список действительных команд git. – amcnabb

+0

Со многими командами git первым аргументом может быть либо ветка, либо имя файла. Иногда вы хотите заполнить имя файла (это всегда должно быть очень быстро), а затем вам нужно подождать очень долгое время, просматривая все ветви, которые вам не нужны. Отключение выполнения git устраняет эту частую проблему. – MarcH

4

Наконец надоела ужасно медленным автозавершения в zshell и начиная ищет решение. Я в конечном итоге переход от «мерзавца» с помощью «gitfast» плагина, который уже установлен в/о моем ЗШЕ и лечит ... https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins#gitfast