`Git` домашнього слова не використовує завершення


144

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

Хтось може пролити трохи світла на те, чому і як це вирішити? Я вважаю за краще використовувати git homebrew, оскільки він є більш сучасним.

Моя оболонка є zsh, і не встановлюється bash-completionта не zsh-completionsпрацює (навіть після виконання інструкцій після встановлення homebrew).

Крім того, після встановлення git з домашньою мовою він говорить

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,17x).
ti7

Відповіді:


287

Ви шукаєте:

brew install git bash-completion

Як зазначається у коментарі warpc, вам потрібно буде додати наступне до свого, ~/.bash_profileщоб приступити до роботи з домашньою мовою:

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
Моя оболонка zsh. Це означає, що я повинен робити brew install git zsh-completions? Крім того, після встановлення git з домашньою мовою він говорить Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions: так чи не міг я використовувати один із них?
користувач137369

2
Ні встановлення, bash-completionні zsh-completionsроботи (навіть після дотримання домашньої програми після встановлення).
користувач137369

12
Ви також додали в ~ / .bash_profile для bash case цей вміст: if [-f $ (brew --prefix) / etc / bash_completion]; тоді . $ (brew --prefix) / etc / bash_completion fi
warpc

5
Я вже встановив git без заварки. Тепер я хочу встановити bash_completion за допомогою brew. Я запустив Brew install bash-завершення та додав вище код, але не пощастило
MagePsycho

3
Варто зазначити, що установка git через заварку має надзвичайно важливе значення для цього. Я не знав, що яблучна версія git є частиною проблеми. Я відповів на цю відповідь, перш ніж я знав це, і тепер не можу подати заяву :(
Реймус Клінсман,

109

Це завершення вкладки git працює на 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
Трохи обманювати це називати однолінійним при використанні &&. Будь-який баш-скрипт може бути однолінійним.
користувач137369

1
Ви справжній MVP!
heez

2
Однозначно краще, ніж brew installметод. Просто тому, що це працює.
дчайка

2
Години шукали рішення щодо того, чому bash не збирає команди для завершення git. Нарешті, це спрацювало! Дуже дякую!
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 (концентратор 2.2.9) та базовим завершенням 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 повинна бути позначена як правильна відповідь.
mgd

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

1
Це не правильна відповідь. Відповідь @graham perks правильна.
CantGetANick

@CantGetANick відповідь Грехама не вирішила мого питання, це так, саме тому я і позначив це.
користувач137369

1
Погодьтеся на 100% з користувачем137369: У мене вже був встановлений пакет домашньої біржі з базовим завершенням, тому відповідь @ Graham не могла працювати для мене. Однак brew install gitвиправлено все (немає необхідності - без завершень). Я думаю, що це також правильна відповідь.
bronson

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
Джонатан Кнапп

Ні. Це все ще не працює для мене. Я завжди повертався до використання git OSX, це завершення - це занадто велика функція, щоб його відпустити.
користувач137369

git-завершення перестало працювати для мене після оновлення до Mavericks. Мені довелося, 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

Це працювало для мене в Mojave (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) завершення завантажуватимуться правильно, оскільки баш буде джерелом, .bashrcа НЕ .bash_profile.


0

Це може мати щось спільне з тим, що використовується libedit замість readline в Lion.

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

brew install readline

0

Для тих, у кого вже встановлено заварку для завершення роботи. У мене не було встановлено скрипт завершення роботи 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-fill.bash" є десь (мій був тут: /usr/local/git/contrib/completion/git-completion.bash)

Все, що вам потрібно зробити, це знайти файл: sudo find / -type f -name "git-fill.bash"

Потім джерело його шляху у вашому .bash_profile. Наприклад, мені потрібно було додати цей рядок до мого ~ / .bash_profile:

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

Не забувайте надсилати джерело свого ~ / .bash_profile або заново відкривати свій термінал;)

від: how-enable-git-tab-завершення-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. Навіть керівництво GitHub також. Але я пропоную вам перевірити спочатку, чи файл git-fill.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-complete.bash не існує на вашій машині, завантажте його з наведеного нижче та збережіть його на своїй локальній машині у новому файлі під назвою git-fill.bash у / usr / local / тощо / 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-fill.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-fill.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.