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.

260 голосов | спросил Michael Durrant 8 J000000Sunday12 2012, 22:25:28

7 ответов


370

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, чтобы дать разрешение на запуск скрипта.)

ответил Michael Durrant 9 J000000Monday12 2012, 02:28:50
65

Некоторые люди предпочитают использовать диспетчер пакетов для автоматизации установки, обновления и настройки пакетов 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 с варкой здесь.

ответил Lane 29 Maypm13 2013, 22:02:45
20

Запустите это на терминале:

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

Вот и все. Это сработало для меня.

ответил Caique Pereira 20 J0000006Europe/Moscow 2016, 14:30:17
3

Вы можете установить 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).

ответил Kimmo Suominen 9 J000000Monday12 2012, 02:06:50
3

Вот что сбивает с толку некоторых из вас: у вас установлены пивные или порты, но вы используете систему 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 .

ответил Brandon 4 MaramFri, 04 Mar 2016 03:46:24 +03002016-03-04T03:46:24+03:0003 2016, 03:46:24
1

Если ваше завершение 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, и теперь он правильно автозаполняет мои имена ветвей.

ответил wisbucky 30 Maypm17 2017, 21:33:07
-2

Найдите файл .bashrc.

Откройте его и добавьте эту строку внизу:

source /etc/bash_completion.d/git

ответил crmpicco 3 WedEurope/Moscow2014-12-03T20:17:23+03:00Europe/Moscow12bEurope/MoscowWed, 03 Dec 2014 20:17:23 +0300 2014, 20:17:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132