Доморощенный `git` не использует завершение


144

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

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

Моя оболочка - 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

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


Какую версию zshи gitвы используете?
Simont

Последний из доморощенного. zsh 5.0.2 и git 1.8.1.3
user137369

Работают ли другие gitдополнения (например, git co<TAB>==> git commit)?
Simont

2
Я подозреваю, что несколько разных проблем заканчиваются здесь, но установка git через brew исправила это для меня. Кажется, zsh-completionsон не был доволен Mac Git, хотя раньше он работал нормально (возможно, обновлен вслепую до 0.17.x).
ti7

Ответы:


287

Вы ищете:

brew install git bash-completion

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

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

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


Примечание: если вы используете Bash v4 или новее (через brew install bash), то вы захотите использовать brew install bash-completion@2, чтобы включить завершение вкладки, добавьте следующее, ~/.bash_profileкак описано в предостережениях:

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Дополнительный экспорт необходим для git, docker, youtube-dl и других дополнений, которые могут быть включены в $(brew --prefix)/etc/bash_completion.d/каталог.


3
Моя оболочка это зш. Значит ли это, что я должен сделать brew install git zsh-completions? Кроме того, после установки 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, не могу ли я использовать один из них?
user137369

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

12
Вы также добавили в ~ / .bash_profile для случая bash это содержимое: if [-f $ (brew --prefix) / etc / bash_completion]; затем . $ (brew --prefix) / etc / bash_completion fi
warpc

5
Я уже установил Git без Brew. Теперь я хочу установить bash_completion, используя brew. Я запустил brew install bash-
complete

3
Стоит отметить, что установка git через brew необходима для этого. Я не знал, что яблочная версия git была частью проблемы. Я понизил этот ответ до того, как узнал об этом, и теперь я не могу проголосовать за него :(
Реймус Клинсман

109

Это завершение работы с git tab на 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

14
Это немного обманывает, называя его однострочным при использовании &&. Любой bash-скрипт может быть однострочным.
user137369

1
Вы настоящий MVP!
Боже,

2
Определенно лучше, чем brew installметод. Просто потому что это работает.
Дчайка

2
В течение нескольких часов искали решение, почему bash не собирал команды git-complete. Наконец-то это сработало! Спасибо вам большое!
TheAmazingKnight

1
Это реальное решение проще
Rigin Oommen

22

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


19

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

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

brew unlink bash-completion
brew link bash-completion

После ответа @Graham Pixel это, наконец, заставило меня задуматься.
Люк

Это также просто работало для меня с Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) и bash-complete 1.3 в OS X Sierra 10.12.6.
Джаред

10

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

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

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


5
Нет, это неправильно bash_completionподразумевается как source'd', поэтому определения находятся в вашей оболочке; выполнение не будет иметь никакого эффекта.
toddkaufmann

5

Нашел рабочее решение. Это очень недавно (созданный 16 часов назад, и совершенный 2 часа назад), и это прибывает непосредственно из доморощенного .

brew install git --without-completions

Только что попробовал, и это наконец работает как задумано.


3
Я не вижу, как установка gitбез завершения может улучшить ситуацию, когда завершение не работает. Я считаю, что ответ Грэма Перкса stackoverflow.com/a/14970926/1199564 должен быть помечен как правильный ответ.
мгд

У меня была похожая проблема, и я решил переустановить git --without-completionsи получить bash-completion.bashфайл, .bash_profileкоторый, скорее всего, перезаписан в соответствии со стандартной процедурой.
Леонардо

1
Это не правильный ответ. Ответ @graham perks правильный.
CantGetANick

@CantGetANick Ответ Грэма не решил мою проблему, это сделал, вот почему я отметил это.
user137369

1
Согласитесь на 100% с user137369: у меня уже был установлен пакет для завершения bash, так что ответ @ graham не сработал для меня. Тем не менее, brew install gitвсе исправлено (нет необходимости в --without-завершении). Я думаю, что это также правильный ответ.
Бронсон

5

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

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


1
Вы также заметите, что используемая вами версия git - это версия Apple, а не версия, установленная Homebrew. По крайней мере, в моем случае я сделал. Вы можете проверить версию сgit --version
Джонатан Кнапп

Нет. Это все еще не работает для меня. Я всегда возвращался к использованию мерзавца OSX, это завершение слишком большая функция, чтобы ее отпустить.
user137369

После обновления до Mavericks у меня перестал работать git-complete. Я должен был, brew reinstall gitа также brew reinstall bash-completionзаставить его снова работать.
Крешимир Несек

3

Если у вас $BASH_VERSION<4.1, например, 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

Вы можете получить и добавить его выше.


2

Шаг 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

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

Если выше не работает, попробуйте https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion


1

Для меня пришлось поставить

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

в .bashrc(не .bash_profile), чтобы заставить это работать.

«.bash_profile выполняется для оболочек входа в систему, в то время как .bashrc выполняется для интерактивных оболочек без входа в систему» ​​- В чем разница между .bash_profile и .bashrc? Мне кажется, что MacOS Sierra не работает только .bash_profileпри открытии нового окна терминала .bashrc.

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


1

Это сработало для меня в Мохаве (OSX 10.14.1):

brew install bash-completion

Затем добавьте следующую строку в ваш ~ / .bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

Это просто умножает количество предупреждений
Хуссейн Акрам

1

В 2019 году, используя Bash v5, вам не нужно явно исходить из сценария завершения git bash в вашем .bash_profileили.bashrc

  1. Убедитесь, что у вас есть следующие две строки в вашем .bashrc
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
  1. Загрузите скрипт завершения git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) и сохраните его /usr/local/etc/bash_completion.d/какgit

Это оно! Bash автоматически подберет файл завершения git и включит завершение.


Примечание: я рекомендую внести все эти изменения, так .bashrcкак это гарантирует, что при переходе в интерактивную оболочку (т.е. из pipenv shell), завершения будут загружаться правильно, так как bash будет источником, .bashrcа НЕ - .bash_profile.


0

Это может быть связано с использованием libedit вместо readline в Lion.

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

brew install readline

0

Для тех, у кого уже есть brew-комплектация. У меня не был установлен скрипт завершения 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


0

Если вы использовали homebrew для установки git, то, вероятно, нет необходимости устанавливать что-либо для поддержки завершения git. Файл "git-creation.bash" находится где-то (мой был здесь: /usr/local/git/contrib/completion/git-completion.bash)

Все, что вам нужно сделать, это найти файл: sudo find / -type f -name "git-extension.bash"

Затем укажите его путь в вашем .bash_profile. Например, мне нужно было добавить эту строку в мой ~ / .bash_profile:

source /usr/local/git/contrib/completion/git-completion.bash

Не забудьте указать исходный файл ~ / .bash_profile или заново открыть свой терминал;)

от: how-enable-git-tab-complete-bash-mac-os-x


@ user137369 это делает - потому что здесь вам не нужно устанавливать вещи, которые уже были установлены ...
Dozon Higgs

0

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

Homebrew сообщает вам, что есть каталог со всем необходимым.

Вы можете просто добавить следующую строку к себе, .bash_profileесли вы используете Bash:

source /usr/local/etc/bash_completion.d/git-completion.bash

-1

Включить автоматическое завершение команд GIT в MAC-OS Mojave 10.14 Я разработчик и все время использую GIT из командной строки. Когда я рассматривал перспективы развития, я обычно выполнял много команд, используя командную строку для операций GIT. Большую часть времени очень раздражает, что MAC OS не имеет автоматической поддержки завершения команды, которую я частично поддерживаю. а также подсказки команд, что означает, какие команды доступны для набираемых символов. Поэтому очень сложно набрать очень длинную команду и, в основном, повторяющуюся задачу, поскольку опечатка идет не так. :(

Завершение вкладки, безусловно, будет быстрее и проще. К сожалению, установка git по умолчанию на некоторых компьютерах Mac не включает завершение табуляции.

Так что я искал решение для этой проблемы, и в веб-поиске было найдено несколько решений, таких как StackOverflow, GitHub, а также из среды. К сожалению, эти решения не сработали для меня и были разочарованы тем, что пробовали разные решения много раз.

Я глубоко искал и пробовал разные решения, и, к счастью, это легко исправить. Ниже приведены шаги, которые я собрал из нескольких постов, и, наконец, все заработало, как и ожидалось. Поэтому я надеюсь поделиться с другими, кто имеет эту проблему, как я.

Если вы зайдете в веб-поиск и найдете множество решений, в которых упоминается bash-файл git complete. Даже руководство GitHub также. Но я предлагаю вам сначала проверить, есть ли файл git-creation.bash на вашем компьютере MAC с git-core или что-то еще, что пришло после установки. Вы можете использовать приведенную ниже команду.

sudo find / -type f -name "git-completion.bash"

Вы получите ниже результаты. (может иметь некоторую разницу в зависимости от содержания)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

Я предлагаю вам выбрать, какой из установленных git-core

Если на вашем компьютере не существует сценария git-creation.bash, пожалуйста, найдите его из приведенного выше списка и сохраните его на локальном компьютере в новом файле с именем git-complete.bash в / usr / local / etc / bash_completion.d / каталог.

https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks

Если вы используете оболочку Bash, Git поставляется с хорошим сценарием автозаполнения, который вы можете включить. Загрузите его прямо из исходного кода Git по адресу

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Если на вашем компьютере есть сценарий git-creation.bash, но его нет в каталоге /usr/local/etc/bash_completion.d/, вы должны создать этот каталог и скопировать в него файл. Ниже команда сделает работу:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

После завершения выше. Сценарий git-creation.bash должен существовать на вашем локальном компьютере в каталоге / usr / local / etc / bash_completion.d /.

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

source ~/.bash_profile

Большой!!! ты сделал это Просто запустите окно терминала и попробуйте. Просто наберите "git sta", он покажет предложения, как показано ниже:

git sta
stage    stash    status
git chec<TAB> will show git checkout

см. мой пост GitHub здесь:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

Смотрите мой средний пост здесь:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.