Завершение и откуда это может быть довольно запутанным. Возьмем систему Ubuntu 14.04 в качестве примера:
$ dpkg -L zsh-common | grep git
/usr/share/zsh/functions/Completion/Debian/_git-buildpackage
/usr/share/zsh/functions/Completion/Unix/_stgit
/usr/share/zsh/functions/Completion/Unix/_git
/usr/share/zsh/functions/Completion/Unix/_topgit
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_get_data_git
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_detect_git
/usr/share/zsh/functions/Misc/run-help-git
Пакет zsh-common
содержит функции завершения git. С другой стороны, пакет git
также поставляется с файлами завершения для bash и zsh:
$ dpkg -L git | grep compl
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk
Который содержит файлы, такие как
$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.
В пакете git даже есть подсказка о git, которую можно включить, и все это без особых надстроек, таких как oh-my-zsh.
Подводя итог, можно сказать, что завершение подкоманды git может быть получено из вашей оболочки (zsh):
https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git
из мерзавца
https://github.com/git/git/tree/master/contrib/completion
или из плагинов, таких как ой-мой-zsh.
Возвращаясь к вашему вопросу: старое поведение завершения git chec
которое вы описываете, на самом деле глючит. chec
по-прежнему неоднозначен, и правильный скрипт завершения не должен завершать его до checkout
, так как есть несколько подкоманд, начинающихся с chec
. Если вам нужно такое поведение, выясните, какой из множества сценариев завершения вы использовали ранее, отключите плагин oh-my-zsh git и продолжайте использовать старый сценарий завершения.
Кроме того, я бы порекомендовал создать псевдоним и привыкнуть к нему. Ты можешь использовать
git config --global alias.co checkout
чтобы сделать git co
вашей новой git checkout
- плагин oh-my-zsh знает об этих псевдонимах и будет по-прежнему дополнять имена веток и тегов!