На моей машине с Linux у меня есть автозаполнение для веток с Git.
[Обратите внимание, что мы говорим о завершении ветки git, а не о завершении bash (например, команды, файлы и т. д.). Таким образом, НЕ ответ Лейна вообще]
Например, я могу набрать git checkout
+ TABи получить список ветвей.
Или я могу набрать git checkout feb*
+ TAB, чтобы получить все ветки, начинающиеся с «feb».
Как я могу получить эту функциональность на Mac?
Пробовал скачивать и запускать, bash-completion/bash_completion
но bash-completion/bash_completion.sh.in
без радости. Первый выдавал сообщения об ошибках declare: -A invalid_option
. Второй ошибок не дал. Когда я git checkout
+ TAB, я все еще получаю список файлов в каталоге, а не ветки. Я в корне проекта.
Автозаполнение для каталогов и команд bash работает нормально, поэтому оно специфично для Git.
Итак, мне нужен скрипт автозаполнения git .
Я получил это из этого URL -адреса , используя следующую команду в приложении «Терминал»:
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
Не нужно беспокоиться о том, в каком каталоге вы находитесь, когда запускаете это, поскольку ваш домашний каталог ( ~
) используется с целью.
Затем я добавил в свой ~/.bash_profile
файл следующий код «выполнить, если он существует»:
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
Обновление: я делаю эти фрагменты кода более краткими, чтобы уменьшить размер моего .bashrc
файла, в этом случае я теперь использую:
test -f ~/.git-completion.bash && . $_
Примечание: $_
означает последний аргумент предыдущей команды. так что . $_
означает запустить его - .git-completion.bash
в данном случае "это"
Это по-прежнему работает как на Ubuntu, так и на OSX, а также на машинах без сценария .git-completion.bash
сценария.
Теперь git
Tab(на самом деле это git
TabTab) работает как шарм!
ps: если это не работает сразу, вам может потребоваться запустить chmod u+x ~/.git-completion.bash
, чтобы предоставить себе необходимое разрешение:
chmod
это команда, которая изменяет права доступа к файламu
означает пользователя, которому принадлежит файл, по умолчанию его создатель, т.е. вы+
означает установить/активировать/добавить разрешениеx
означает разрешение на выполнение, т.е. возможность запуска скриптаModels
папку, когда я нажимал m
Tab
, чтобы он автозаполнялся до master
.source ~/.bash_profile
после вставки кода. Перезапуск терминала также сделает то же самое.git
но Apple по умолчанию git
) brew install git
и перезапустите терминал для тех, кто сталкивается со странной ошибкой, напримерgit checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
еще раз спасибо :)git-completion.bash
устарело: пользователям MacOS вместо этого следует использовать оболочку завершения zsh для git git-completion.zsh
: github.com/git/git/blob/master/contrib/completion/…Некоторые люди предпочитают использовать диспетчер пакетов для автоматизации установки, обновления и настройки пакетов Mac OS. Я поклонник менеджеров пакетов, и я думаю, что Homebrew — лучший менеджер пакетов для Mac OS (некоторые сказали бы, что это де-факто менеджер пакетов Mac OS).
После того, как вы установили Homebrew, вы можете просто установить git вместе с дополнением bash с помощью brew install git bash-completion
.
Затем вам нужно будет поместить в свой файл следующее ~/.bash_profile
:
if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
. `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi
(Примечание: если эта установка завершается ошибкой 404, а у вас уже установлен git, просто удалите часть git из этой установки brew)
git
и добавление bash-completion
- это совсем не то же самое, что добавление .git-completion.bash
. Это разные программы, и они делают совершенно разные вещи - одна выполняет автозаполнение команды bash, а другая - автозаполнение команды git, и «наир» встретится;)~/.bash_profile
?~/.bash_profile
файл были указаны для меня в выводе homebrew. Я использовал их вместо строк выше. Затем вам нужно перезагрузить профиль bash в каждом окне терминала, в котором вы хотите использовать автозаполнение, с помощью командыsource ~/.bash_profile
Запустите это на терминале:
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
Затем сделайте следующее:
vi ~/.bash_profile
Добавьте эти строки:
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
Это все. Это сработало для меня.
~/.bash_profile
файл не существует. Это нормально, просто создайте файл, поместите if
туда этот скрипт и сохраните. После этого перезагрузите оболочку, и она заработает.git
и git-completion.bash
уже поставляются с инструментами командной строки macOS ( xcode-select --install
). Чтобы включить автозаполнение bash, добавьте это в свой файл ~/.bash_profile
.
[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] \
&& . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
Это также включит автозаполнение для веток git.
if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash > /dev/null fi
~/.bash_profile
не забудьте также запустить source ~/.bash_profile
(особенно если вы создаете ~/.bash_profile
файл в первый раз)xcode-select --install
из Terminal.app и перезапустить, когда закончите.macOs изменен с bash на zsh в качестве оболочки по умолчанию, начиная с Catalina.
Поэтому вам понадобятся специальные сценарии автозаполнения для zsh.
Вот как установить их с помощью Homebrew:
brew install zsh-completion
zsh-completion Brew на самом деле включает в себя git-completion.
Чтобы активировать автозаполнение, вам нужно добавить небольшой блок кода в файл ~/.zshrc
. Возможно, вам придется создать этот файл в папке пользователя, если он еще не существует. Примечание . Вывод вышеприведенного сценария установки точно скажет вам, какой код добавить, поэтому внимательно прочитайте его и скопируйте оттуда на случай, если он был обновлен с момента моего написания здесь.
if type brew &>/dev/null; then
FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
autoload -Uz compinit
compinit
fi
Важно:
По завершении установки прочтите выходные данные сценария установки.
Он не только проинструктирует вас добавить код в .zshrc, но и посоветует дополнительные действия, которые могут потребоваться, например принудительное восстановление zcompdump. Но, скорее всего, дополнительные шаги вам не понадобятся.
zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?
Но это работает!git
пакета Homebrew, а не zsh-completions
(у которого есть дополнения для расширений Git, таких как Git Flow и другие). Итак, brew install git
, который говорит вам, что он устанавливает дополнения, а затем следуйте руководству Homebrew по завершению оболочки .Вот что смущает некоторых из вас: у вас установлены brew или порты, но вы используете системный git в формате /usr/bin/
. Чтобы проверить это:
which git
Если вы видите, /usr/bin/git
то либо brew настроен неправильно, либо вы не установили git через brew.
Если вы устанавливаете git через brew, то включение дополнений bash для brew также включит завершение bash для git. Это связано с тем, что /usr/local/etc/bash_completion
на самом деле все исходит из /usr/local/bash_completion.d
, а пакет brew для git устанавливает туда скрипт завершения git.
Вы можете установить bash и git с MacPorts с включенной опцией «bash_completion». Вероятно, это самый простой способ поддерживать актуальность как git, так и дополнений.
http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard
Чтобы установить MacPorts: http://www.macports.org/install.php/
Дополнительная информация
Что касается поиска настроек завершения в вашей системе Linux, загляните в /etc/bash_completion.d/git (это длинный файл). Копирование этого само по себе, вероятно, не сработает, поскольку оно предназначено для использования инфраструктурой завершения через /etc/bash_completion (который берется из /etc/profile.d/bash_completion.sh; файлы в /etc/profile .d взяты из /etc/profile).
Для macOS Catalina+ в формате zsh
:
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh -o ~/.git-completion.zsh
Затем обновите свой ~/.zshrc
с помощью:
if [ -f ~/.git-completion.zsh ]; then
. ~/.git-completion.zsh
fi
c:8: command not found: __git_aliased_command
всякий раз, когда пытаюсь выполнить автозаполнение...Если ваше завершение git частично сломано, даже после поиска https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
, вам может просто потребоваться обновить версию git.
Например, когда я набирал git check
+ TAB
, он корректно выполнял автозаполнение git checkout
. Но когда я набрал git checkout
+ TAB
, он не отображал список ветвей, только HEAD
.
Исправление для меня состояло в том, чтобы обновить мою git
версию. У меня была версия 2.7.0, которая, по-видимому, несовместима с последней версией git-completion.bash
. Я запустил brew upgrade git
, который обновил его до 2.13.0, и теперь он правильно автозаполняет имена моих веток.
brew upgrade git
и brew link git
(с включенным переопределением)update
на upgrade
.Безусловно, лучшая ссылка, которую я нашел для решения этой самой проблемы, — это SpinDance Коннора Ливингстона :
Если скрипт git-completion.bash не существует на вашем компьютере, извлеките его по ссылке, которую я предоставил выше (а это ) и сохраните его на своем локальном компьютере в новом файле с именем git-completion.bash в каталоге / каталог usr/local/etc/bash_completion.d/ . Если скрипт git-completion.bash существует на вашем компьютере, но не находится в каталоге /usr/local/etc/bash_completion.d/ , мы должны создать его копию в этом каталоге. Быстрый sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash должен помочь. Для тех, кому интересно /usr/local/etc/bash_completion.d/каталог: он предназначен для хранения новых команд завершения, и вам, возможно, придется создать его, если он еще не существует на вашем компьютере.
На этом этапе скрипт git-completion.bash должен существовать на вашем локальном компьютере в каталоге /usr/local/etc/bash_completion.d/ . Теперь подключим скрипт завершения git к bash, указав на него из ~/.bash_profile .
Примечание: тильда в предыдущем предложении относится к домашнему каталогу на вашем компьютере. Добавьте следующую строку в ~/.bash_profile : source /usr/local/etc/bash_completion.d/git-completion.bash и сохраните. Последний шаг — перезагрузить ваш профиль bash. Вы можете добиться этого, запустив source ~/.bash_profile в текущем сеансе bash.
Пробовал, и он хорошо работает для веток, но когда вы делаете git st
+ , tab
он показывает ошибку, подобную этой
неизвестная опция: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config использование: git [--version] [--help] [-C ] [-c =] [--exec -path[=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=] [--work-tree=] [--namespace=] []
Искал в Интернете и обнаружил, что это --list-cmds
была .git-completion.bash
последняя версия git, а на моем Mac версия git была2.17.2
git --version
командыЗатем укажите тот же номер версии в URL-адресе, что и я.
curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
Затем выполните те же действия, что и в верхнем ответе, поместите приведенный ниже код в~/.bash_profile
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
Вы должны попытаться обновить версию git до последней версии, тогда она должна работать.
Установите oh-my-zsh и установите zsh в качестве оболочки по умолчанию и поблагодарите меня позже :)
Большинство пользователей установят git
инструменты командной строки xcode по адресу , /usr/bin/git
а правила завершения bash для git будут доступны по адресу /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
.
В этом случае нет необходимости устанавливать git из Homebrew или исходные правила завершения git с raw.githubusercontent.com. Просто создайте символическую ссылку следующим образом:
cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git
Примечание: убедитесь, что вы установили и настроили bash-completion
пакет из Homebrew.
Если вы хотите переключиться на другую оболочку, fish
эта функция встроена в оболочку. Она также имеет некоторые другие удобные функции, такие как автозаполнение при наборе текста.
Найдите свой .bashrc
файл.
Откройте его и добавьте эту строку внизу:
source /etc/bash_completion.d/git
/etc/bash_completion.d/
папке на относительно новой системе (OSX 10.10.3)./etc/bash_completion.d/git
? Это сделало бы ваш ответ более ценным.brew install git bash-completion
как объяснено на apple.stackexchange.com/a/92637/136365 , вы получите эти файлы, хотя и в другом месте.
Микаэль Вайс
тупица
Джилл и я
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc && . ~/.zshrc
ссылка