Homebrew ' git ' не использует завершение

при использовании git OSX, после изменения файла я могу просто сделать git commit <tab>, и это автоматически завершит имя файла к тому, который был изменен. Однако, если я устанавливаю более новую версию git из homebrew и использую ее, эта функция больше не работает (то есть я нажимаю <tab> и он просто "спрашивает"меня, какой файл я хочу сделать, даже включая те, которые не имеют изменений).

может ли кто - нибудь пролить свет на то, почему и как это решить? Я бы предпочел использовать git homebrew, так как он более современный.

моя оболочка zsh, и ни установка bash-completion или zsh-completions работал (даже после выполнения инструкций homebrew после установки).

кроме того, после установки git с homebrew он говорит

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions

так разве я не могу использовать один из них?

12 ответов


вы ищете:

brew install git bash-completion

как говорится в комментарии warpc, вам нужно добавить следующее к вашему ~/.bash_profile чтобы получить bash-завершение работы homebrew:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

выше упомянуто в предостережениях при установке формулы завершения bash.


это завершение git tab get работает на OSX без необходимости перезагрузки терминала:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile

мне почему-то отсутствует файл $(brew --prefix)/etc/bash_completion Итак ,правильный ответ @ Graham Perks не сработал для меня

это закончилось тем, что исправление в моем случае было:

brew unlink bash-completion
brew link bash-completion

в случае, если кто-то еще делает мою глупую ошибку, попробуйте brew install git. Я использовал git это поставляется с Xcode и не понял, что я никогда не устанавливал Git Homebrew, чтобы получить автозаполнения.


Я решил проблему, выяснив, что $(brew --prefix)/etc/bash_completion вернулся Permission denied при выполнении. Поэтому после простого:

chmod +x $(brew --prefix)/etc/bash_completion

теперь все работает нормально. Мне интересно, почему Homebrew не делает хотя исполняемый файл на установки.


у меня был тот же вопрос и даже нашел этот пост сегодня утром. Я исправил проблему, обновив brew с brew update а затем переустановить git с brew reinstall git.

затем я был уведомлен о другом файле, который блокирует процесс связывания homebrew, в моем случае это было /usr/local/share/zsh/site-functions/git-completion.bash. Удаление файла и запуск brew link git решается вопрос. Предполагая, что это была просто плохая версия рецепта, на которую мы наткнулись.


найдено рабочее решение. Это очень недавно (автор 16 часов назад и совершил 2 часа назад), и он приходит непосредственно из homebrew.

brew install git --without-completions

просто попробовал, и он, наконец, работает по назначению.


Шаг 1: Скачать сценарий автоматического завершения:

cd ~
curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

Шаг 2: Обновление .bash_profile и .bashrc и

echo "source ~/git-completion.bash" >> .bash_profile
echo "source ~/git-completion.bash" >> .bashrc

это будет работать как шарм

через https://www.anintegratedworld.com/git-tab-autocomplete-on-osx-10-11-el-capitan/


если у вас $BASH_VERSION 3.2.57(1)-release после:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

однако, если вы brew install bash для версии 4.4.12(1)-release вы можете использовать лучшие и более полные дополнения в:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

обратите внимание, что некоторые пакеты (brew, docker, tmux) по-прежнему будут добавлять некоторые дополнения в $(brew --prefix)/etc/bash_completion.d/ поэтому вы можете добавить:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

наконец, вы должны иметь возможность добавить сценарий завершения git, если по какой-то причине способ установки git не добавил его любой из них:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \
    -o $(brew --prefix)/etc/bash_completion.d/git

вы можете получить и добавить его с вышеуказанным.


для меня , я должен был поставить

source $(brew --prefix)/etc/bash_completion

на .bashrc (не .файл), чтобы получить эту работу.

".файл выполняется для оболочек входа, в то время как .bashrc является казнили для интерактивных оболочек без входа " -- from в чем разница между .bash_profile и .bashrc следующее? мне кажется, что MacOS Sierra не выполняет .bash_profile при открытии нового окна терминала, только .bashrc.

Я бы не поместил его в _bash_profile, потому что тогда Мне нужно перезагрузить / выйти из системы, чтобы обновления вступили в силу.


это может иметь какое-то отношение к использованию libedit вместо readline в Lion.

попробуйте установить readline перед git.

brew install readline

для тех, у кого уже установлен brew bash-завершение. У меня не был установлен скрипт завершения Git и не мог найти никакого крана для этого.

поэтому я добавил его вручную:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

обратите внимание, что вы должны переименовать файл и удалить расширения для его работы.

Если у вас нет завершения или git установлен, установите его в принято отвечать.

brew install git bash-completion