Homebrew nie używa uzupełniania

144

Korzystając z git OSX, po zmodyfikowaniu pliku mogę po prostu zrobić git commit <tab>, a to automatycznie uzupełni nazwę pliku do tej, która została zmodyfikowana. Jeśli jednak zainstaluję nowszą wersję gita z homebrew i skorzystam z niej, ta funkcja już nie działa (co oznacza, że ​​naciskam <tab>i po prostu „pyta” mnie, na jakim pliku chcę to zrobić, nawet włączając te, które nie mają zmian ).

Czy ktoś może rzucić trochę światła na to, dlaczego i jak rozwiązać ten problem? Wolałbym używać git homebrew, ponieważ jest bardziej aktualny.

Moja powłoka to zsh i Ani instaluję, bash-completionani nie zsh-completionsdziałam (nawet po wykonaniu instrukcji po instalacji homebrew).

Ponadto po zainstalowaniu gita z homebrew jest napisane

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions

Więc czy nie powinienem być w stanie użyć jednego z nich?

user137369
źródło
Jakiej wersji zshi gitktórej używasz?
simont
Najnowsze z homebrew. zsh 5.0.2 i git 1.8.1.3
user137369
Czy inne gituzupełnienia działają ( na przykład git co<TAB>==> git commit)?
simont
2
Podejrzewam, że kończy się tutaj kilka różnych problemów, ale zainstalowanie gita przez brew naprawiło to dla mnie. Wydaje się, że zsh-completionsnie był zadowolony z mac git, chociaż wcześniej działał dobrze (prawdopodobnie zaktualizowany na ślepo do wersji 0.17.x).
ti7

Odpowiedzi:

287

Szukasz:

brew install git bash-completion

Jak stwierdza komentarz warpc, musisz dodać następujące elementy do swojego, ~/.bash_profileaby uzupełnienie bash homebrew działało:

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

Powyższe jest wspomniane w zastrzeżeniach podczas instalowania formuły zakończenia basha.


Uwaga: jeśli używasz Bash v4 lub nowszego (przez brew install bash), będziesz chciał użyć brew install bash-completion@2, aby włączyć uzupełnianie kart, dodaj następujące elementy zgodnie z ~/.bash_profileopisem w zastrzeżeniach:

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"

Dodatkowy eksport jest niezbędny w przypadku git, docker, youtube-dl i innych uzupełnień, które mogą znajdować się w $(brew --prefix)/etc/bash_completion.d/katalogu.

Graham Perks
źródło
3
Moja powłoka to zsh. Czy to oznacza, że ​​powinienem zrobić brew install git zsh-completions? Ponadto po zainstalowaniu gita z homebrew pojawia się komunikat Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions, więc czy nie mógłbym użyć jednego z nich?
user137369
2
Ani instalacja, bash-completionani zsh-completionsdziałanie (nawet po wykonaniu instrukcji homebrew po instalacji) nie działały.
user137369,
12
Czy dodałeś również w ~ / .bash_profile dla sprawy bash następującą zawartość: if [-f $ (brew --prefix) / etc / bash_completion]; następnie . $ (brew --prefix) / etc / bash_completion fi
warpc
5
Zainstalowałem już gita bez naparu. Teraz chcę zainstalować bash_completion używając brew. Uruchomiłem brew install bash-
complete
3
Warto zauważyć, że instalacja git through brew jest niezbędna, aby to zadziałało. Nie wiedziałem, że częścią problemu jest wersja gita z jabłkami. Głosowałem w dół, zanim się zorientowałem, a teraz nie mogę głosować za :(
Reimus Klinsman
109

To get's git tab uzupełnianie działające na OSX bez konieczności ponownego uruchamiania terminala:

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
user2347638
źródło
14
Trochę oszustwem jest nazywanie tego jednym liniowcem podczas używania &&. Każdy skrypt bash może być taki jednolinijkowy.
user137369
1
Jesteś prawdziwym MVP!
heez
2
Zdecydowanie lepsze niż brew installmetoda. Po prostu dlatego, że działa.
dchayka
2
Godzinami szukałem rozwiązania, dlaczego bash nie odebrał poleceń uzupełniania git. Wreszcie zadziałało! Dziękuję bardzo!
TheAmazingKnight
1
To jest rzeczywiste rozwiązanie łatwiejsze
Rigin Oommen
22

Na wypadek, gdyby ktoś inny popełnił mój głupi błąd, spróbuj brew install git. Używałem tego, gitco jest dostarczane z Xcode i nie zdawałem sobie sprawy, że nigdy nie instalowałem git Homebrew, aby uzyskać autouzupełnianie.

Harvey
źródło
19

z jakiegoś powodu brakowało mi pliku, $(brew --prefix)/etc/bash_completionwięc poprawna odpowiedź @Graham Perks nie zadziałała

Skończyło się na tym, że poprawka w moim przypadku była następująca:

brew unlink bash-completion
brew link bash-completion
Anentropowy
źródło
Po wykonaniu odpowiedzi @Graham Pixel, to w końcu sprawiło, że dla mnie zadziałało.
Łukasz
To również po prostu działało dla mnie z Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) i bash-Complete 1.3 na OS X Sierra 10.12.6.
jared
10

Rozwiązałem problem, odkrywając, że $(brew --prefix)/etc/bash_completionpowrócił Permission deniedpo wykonaniu. Więc po prostym:

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

Teraz wszystko działa dobrze. Zastanawiam się jednak, dlaczego Homebrew nie sprawia, że bash_completionplik jest wykonywalny podczas instalacji.

Asbjørn Ulsberg
źródło
5
Nie, to jest złe. bash_completionma być sourcetak, więc definicje są w twojej powłoce; wykonanie nie przyniesie żadnego efektu.
toddkaufmann
5

Znalazłem działające rozwiązanie. Jest bardzo nowy (stworzony 16 godzin temu i wydany 2 godziny temu) i pochodzi bezpośrednio z homebrew .

brew install git --without-completions

Właśnie go wypróbowałem i w końcu działa zgodnie z przeznaczeniem.

user137369
źródło
3
Nie widzę, jak instalacja gitbez ukończenia może poprawić sytuację, w której ukończenie nie działa. Uważam, że odpowiedź stackoverflow.com/a/14970926/1199564 Grahama Perksa powinna zostać oznaczona jako poprawna.
mgd
Miałem podobny problem i rozwiązałem ponowną instalację git --without-completionsi pozyskiwanie bash-completion.bashpliku z .bash_profiletego pliku, który najprawdopodobniej jest nadpisywany zgodnie ze standardową procedurą.
Leonardo
1
To nie jest poprawna odpowiedź. Odpowiedź @graham perks jest prawidłowa.
CantGetANick
Odpowiedź @CantGetANick Graham nie rozwiązała mojego problemu, to tak, dlatego to oznaczyłem.
user137369
1
Zgadzam się w 100% z user137369: miałem już zainstalowany pakiet uzupełniania bash homebrew, więc odpowiedź @ graham nie mogłaby dla mnie działać. Jednak brew install gitnaprawiono wszystko (nie ma potrzeby - bez uzupełnień). Myślę, że to również poprawna odpowiedź.
bronson
5

Miałem ten sam problem i nawet znalazłem ten post dziś rano. Naprawiłem problem, aktualizując brew za pomocą, brew updatea następnie ponownie instalując git za pomocą brew reinstall git.

Zostałem wtedy powiadomiony o innym pliku, który blokuje proces łączenia homebrew, w moim przypadku tak było /usr/local/share/zsh/site-functions/git-completion.bash. Usunięcie pliku i uruchomienie brew link gitrozwiązało problem. Domyślam się, że to tylko zła wersja przepisu, na którą się natknęliśmy.

Jonathan Knapp
źródło
1
Zauważysz również, że wersja git, której używasz, jest wersją Apple, a nie wersją zainstalowaną przez Homebrew. Przynajmniej w moim przypadku tak. Możesz sprawdzić wersję zgit --version
Jonathan Knapp
Nie. To nadal nie działa dla mnie. Zawsze wracałem do korzystania z gita OSX, to ukończenie jest po prostu zbyt dużą funkcją, aby ją odpuścić.
user137369
git-Complete przestał działać dla mnie po aktualizacji do Mavericks. Musiałem, brew reinstall gita także brew reinstall bash-completionsprawić, by znów zadziałało.
Krešimir Nesek
3

Jeśli masz $BASH_VERSION<4,1, to na przykład 3.2.57(1)-releasewykonaj:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Jeśli jednak masz brew install bashwersję 4.4.12(1)-release , możesz użyć lepszych i pełniejszych uzupełnień w:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

Zauważ, że niektóre pakiety (brew, docker, tmux) nadal będą umieszczać pewne uzupełnienia, $(brew --prefix)/etc/bash_completion.d/więc możesz dodać:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

Na koniec powinieneś móc dodać skrypt uzupełniania git, jeśli z jakiegoś powodu sposób, w jaki zainstalowałeś git, nie dodał go do żadnego z tych:

[[ -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

Możesz go pobrać i dodać za pomocą powyższego.

dlamblin
źródło
1

Dla mnie musiałem położyć

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

do .bashrc(nie .bash_profile), aby to zadziałało.

".bash_profile jest wykonywany dla powłok logowania, podczas gdy .bashrc jest wykonywany dla interaktywnych powłok niezalogowanych" - z. Jaka jest różnica między .bash_profile i .bashrc? Wydaje mi się, że MacOS Sierra nie uruchamia się tylko .bash_profilepodczas otwierania nowego okna terminala .bashrc.

Nie umieściłbym tego w _bash_profile, ponieważ wtedy musiałbym ponownie uruchomić / wylogować się, aby aktualizacje odniosły skutek.

antonyh
źródło
1

To działało dla mnie w Mojave (OSX 10.14.1):

brew install bash-completion

Następnie dodaj następujący wiersz do swojego ~ / .bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
ar31an
źródło
Po prostu mnoży liczbę ostrzeżeń
Hussain Akram
1

W 2019 roku, używając Bash v5, nie musisz jawnie pozyskiwać skryptu uzupełniającego git bash w swoim .bash_profilelub.bashrc

  1. Upewnij się, że masz następujące dwie linie w swoim .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. Pobierz skrypt uzupełniający git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) i zapisz go /usr/local/etc/bash_completion.d/jakogit

Otóż ​​to! Bash automatycznie pobierze plik uzupełnienia git i włączy uzupełnianie.


Uwaga boczna: Zalecam wprowadzenie wszystkich tych zmian, .bashrcponieważ zapewnia to, że kiedy wpadniesz do powłoki interaktywnej (tj. Z pipenv shell), uzupełnienia zostaną poprawnie załadowane, ponieważ bash będzie źródłem, .bashrca NIE .bash_profile.

cgons
źródło
0

Może to mieć coś wspólnego z używaniem libedit zamiast readline w Lion.

Spróbuj zainstalować readline przed git.

brew install readline
Alex
źródło
0

Dla tych, którzy już zainstalowali warzelnię. Nie miałem zainstalowanego skryptu uzupełniania git i nie mogłem znaleźć do tego celu.

Dodałem więc ręcznie:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

Pamiętaj, że musisz zmienić nazwę pliku i usunąć rozszerzenie, aby działał.

Jeśli nie masz zainstalowanego dodatku Complete lub git, zainstaluj go w zaakceptowanej odpowiedzi.

brew install git bash-completion

Andrei
źródło
0

Jeśli użyłeś homebrew do zainstalowania git, prawdopodobnie nie ma potrzeby instalowania czegokolwiek do obsługi uzupełniania git. Plik „git-Complete.bash” jest gdzieś (mój był tutaj: /usr/local/git/contrib/completion/git-completion.bash)

Wszystko, co musisz zrobić, to znaleźć plik: sudo find / -type f -name "git-Complete.bash"

Następnie umieść jego ścieżkę w swoim .bash_profile. Na przykład musiałem dodać tę linię do mojego ~ / .bash_profile:

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

Nie zapomnij pobrać swojego ~ / .bash_profile lub ponownie otworzyć terminal;)

from: how-enable-git-tab-complete-bash-mac-os-x

Dozon Higgs
źródło
@ user137369 to robi - bo tutaj nie musisz instalować rzeczy, które były już zainstalowane ...
Dozon Higgs
0

Wiem, że to stary post, ale tak naprawdę nie musisz instalować żadnych dodatkowych pakietów.

Homebrew informuje Cię, że istnieje katalog ze wszystkimi potrzebnymi rzeczami.

Możesz po prostu dodać następujący wiersz do swojego, .bash_profilejeśli używasz Bash:

source /usr/local/etc/bash_completion.d/git-completion.bash
aldavigdis
źródło
-1

Włącz automatyczne uzupełnianie poleceń GIT w systemie MAC-OS Mojave 10.14 Jestem programistą i cały czas używam GIT z wiersza poleceń. Kiedy rozważam perspektywę programistyczną, wykonywałem wiele poleceń za pomocą wiersza poleceń dla operacji GIT. W większości przypadków jest to bardzo irytujące, że MAC OS nie obsługuje automatycznego wykonywania poleceń, które częściowo obsługuję. a także sugestie dotyczące poleceń, co oznacza, jakie polecenia są dostępne dla wpisywanych znaków. Dlatego wpisywanie bardzo długich poleceń i najczęściej powtarzających się zadań jest bardzo kłopotliwe, ponieważ literówka idzie źle. :(

Wypełnianie zakładek z pewnością byłoby szybsze i łatwiejsze. Niestety, domyślna instalacja git na niektórych komputerach Mac nie ma włączonego uzupełniania kart.

Szukałem więc rozwiązania problemu i wyszukałem kilka rozwiązań z wyszukiwarki internetowej, takich jak StackOverflow, GitHub, a także z medium. Niestety, te rozwiązania nie działały w moim przypadku i frustrowałem się, próbując wiele razy różnych rozwiązań.

Szukałem głęboko i wypróbowywałem różne rozwiązania i na szczęście jest to łatwe do naprawienia. Poniżej znajdują się kroki, które zebrałem z kilku postów i ostatecznie zadziałało zgodnie z oczekiwaniami. Mam więc nadzieję, że podzielę się z innymi, którzy mają ten problem, jak ja.

Jeśli przejdziesz do wyszukiwania w Internecie, możesz znaleźć wiele rozwiązań, które wspominają o pliku bash uzupełniania git. Nawet przewodnik po GitHubie. Ale proponuję najpierw sprawdzić, czy plik git-Complete.bash znajduje się już na twoim komputerze MAC z git-core lub czymś innym, co pochodzi z instalacji. możesz użyć poniższego polecenia.

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

otrzymasz poniższe wyniki. (może różnić się w zależności od treści)

/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

Sugeruję, abyś wybrał zainstalowany z git-core

Jeśli skrypt git-Complete.bash nie istnieje na Twoim komputerze, pobierz go z poniższego podanego powyżej i zapisz na komputerze lokalnym w nowym pliku o nazwie git-Complete.bash w katalogu / usr / local / etc / bash_completion.d / katalog.

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

Jeśli używasz powłoki Bash, Git ma ładny skrypt automatycznego uzupełniania, który możesz włączyć. Pobierz go bezpośrednio z kodu źródłowego Git pod adresem

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

Jeśli skrypt git-Complete.bash istnieje na twoim komputerze, ale nie ma go w katalogu /usr/local/etc/bash_completion.d/, powinieneś utworzyć ten katalog i skopiować do niego plik. Poniższe polecenie wykona zadanie:

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

Po wykonaniu powyższego. Skrypt git-Complete.bash powinien istnieć na twoim komputerze lokalnym w katalogu / usr / local / etc / bash_completion.d /.

Teraz musisz odświeżyć swój profil za pomocą poniższego polecenia. Załaduje dodany plik bash do kontekstu terminala.

source ~/.bash_profile

Wspaniały!!! zrobiłeś to. Po prostu uruchom okno terminala i wypróbuj. Wystarczy wpisać „git sta”, aby wyświetlić sugestie, jak poniżej:

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

zobacz mój post na GitHubie:

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

Zobacz mój post na Medium tutaj:

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

Dilanka M
źródło