git auto-complete для * филиалов * в командной строке?
На моей машине Linux у меня есть autocomplete для ветвей с Git.
[Обратите внимание, что мы говорим о завершении ветки git, завершении bash not (например, команды, файлы и т. д.). Таким образом, НЕ ответ Лейна ]
Например, я могу ввести 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.
7 ответов
ok, поэтому мне понадобился сценарий autocompletion 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
вкладка вкладка ) работает как очарование!
(PS: Если это не работает с летучей мыши, вам может потребоваться запустить chmod -X ~/.git-completion.bash
, чтобы дать разрешение на запуск скрипта.)
Некоторые люди предпочитают использовать диспетчер пакетов для автоматизации установки, обновления и настройки пакетов Mac OS. Я поклонник менеджеров пакетов, и я думаю, что Homebrew - лучший менеджер пакетов для Mac OS (некоторые говорят, что это де-факто менеджер пакетов Mac OS).
После того, как вы установили Homebrew, вы можете просто установить git вместе с bash-completion с 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 этой установки).
Дополнительная информация об установке git и bash-completion с варкой здесь.
Запустите это на терминале:
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 и 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).
Вот что сбивает с толку некоторых из вас: у вас установлены пивные или порты, но вы используете систему git в /usr/bin/
. Чтобы проверить это:
which git
Если вы видите /usr/bin/git
, то либо пиво неправильно настроено, либо вы не установили git через варево.
Если вы устанавливаете git с помощью варева, то включение доработки bash для варева также даст возможность завершения bash для git. Это связано с тем, что /usr/local/etc/bash_completion
фактически выдает все в /usr/local/bash_completion.d
, а пакет brew для git устанавливает скрипт завершения git .
Если ваше завершение 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, и теперь он правильно автозаполняет мои имена ветвей.
Найдите файл .bashrc
.
Откройте его и добавьте эту строку внизу:
source /etc/bash_completion.d/git