git autouzupełnianie dla * gałęzi * w wierszu poleceń?


350

Na moim komputerze z systemem Linux mam autouzupełnianie dla oddziałów za pomocą Git.

[Uwaga: mówimy o zakończeniu gałęzi git, a nie o zakończeniu bash (np. Polecenia, pliki itp.). Tak więc wcale NIE Lane odpowiedź ]

Na przykład mogę wpisać git checkout+ TABi uzyskać listę oddziałów.

Lub mogę wpisać git checkout feb*+, TABaby uzyskać wszystkie gałęzie zaczynające się od „feb”.

Jak mogę uzyskać tę funkcjonalność na komputerze Mac?

Próbowałem pobieranie i uruchamianie bash-completion/bash_completioni bash-completion/bash_completion.sh.inale nie radość. Pierwszy podał komunikaty o błędach declare: -A invalid_option. Drugi nie dał żadnych błędów. Kiedy ja git checkout+ TABmimo to wciąż otrzymuję listę plików w katalogu, a nie gałęzie. Jestem w katalogu głównym projektu.

Automatyczne uzupełnianie dla katalogów i poleceń bash działa poprawnie, więc jest specyficzne dla Git.

Odpowiedzi:


482

ok, więc potrzebowałem skryptu autouzupełniania git .

Mam to z tego adresu URL:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

Nie musisz się martwić, w jakim katalogu się znajdujesz, gdy uruchomisz ten katalog, ponieważ katalog domowy ( ~) jest używany z celem.

Następnie dodałem do mojego ~/.bash_profilepliku następujący kod „uruchom, jeśli istnieje”:

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

Aktualizacja: Ulepszam te fragmenty kodu, aby zmniejszyć mój .bashrcplik, w tym przypadku używam teraz:

test -f ~/.git-completion.bash && . $_

Uwaga: $_oznacza ostatni argument do poprzedniego polecenia. więc . $_oznacza uruchom go - .git-completion.bashw tym przypadku jest to „to”

To nadal działa zarówno na Ubuntu, jak i OSX oraz na komputerach bez skryptu .git-completion.bashskryptowego.

Teraz git Tab(właściwie to git TabTab) działa jak urok!

ps: Jeśli to nie zadziała, może być konieczne uruchomienie w chmod u+x ~/.git-completion.bashcelu uzyskania niezbędnego pozwolenia:

  • chmod to polecenie modyfikujące uprawnienia do plików
  • u oznacza użytkownika, który jest właścicielem pliku, domyślnie jego twórca, tj. ty
  • + oznacza ustaw / aktywuj / dodaj uprawnienie
  • x oznacza wykonanie uprawnienia, tj. możliwość uruchomienia skryptu

1
Tak, zrestartowanie terminala po dodaniu skryptu bash sprawiło, że działał. Siedziałem tutaj, zastanawiając się, dlaczego ciągle próbował autouzupełniania w moim Modelsfolderze, kiedy nacisnąłem, m Tababy autouzupełnianie było master.
Alex

1
Zobacz także unix.stackexchange.com/q/48862/10043, aby uzyskać inną wskazówkę
Michael Durrant,

3
Jeśli zaakceptowana odpowiedź nie działa dla nikogo, spróbuj tego: source ~/.bash_profilepo wklejeniu kodu. Ponowne uruchomienie terminala również spowoduje to samo.
Ben

Dziękuję Ci! Próbowałem innych rzeczy, ale nic nie działało (w tym ten github.com/bobthecow/git-flow-completion/wiki/… ). Twoje rozwiązanie działało jak urok;)
rgoliveira

1
(nie masz naparu, gitale domyślnie Apple git) brew install giti uruchom ponownie terminal dla tych, którzy napotykają dziwny błąd, taki jakgit checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
Sachin

89

Niektóre osoby wolą używać menedżera pakietów do automatyzacji instalacji, aktualizacji i konfiguracji pakietów Mac OS. Jestem fanem menedżerów pakietów i uważam, że Homebrew to najlepszy menedżer pakietów dla Mac OS (niektórzy twierdzą, że jest to de facto menedżer pakietów Mac OS).

Po zainstalowaniu Homebrew możesz po prostu zainstalować git wraz z ukończeniem bash z brew install git bash-completion.

Następnie musisz umieścić w swoim ~/.bash_profile:

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
  . `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

(Uwaga: jeśli ta instalacja zakończy się niepowodzeniem z błędem 404, a masz już zainstalowany git, po prostu usuń część git tej instalacji parzenia)

Więcej informacji na temat instalowania git i bash-zakończeniu z brew znajdziesz tutaj.


27
Dodawanie giti dodawanie bash-completionnie jest wcale tym samym, co dodawanie. .git-completion.bash Są to różne programy i robią całkiem różne rzeczy - jeden wykonuje automatyczne uzupełnianie poleceń bash, a drugi automatyczne uzupełnianie poleceń git i 'nair the twain się spotkają;)
Michael Durrant

działa jak urok, wielkie dzięki. Czy mógłbyś wyjaśnić, do czego skryptu mnie dodałeś ~/.bash_profile?
Vikas Bansal

Pomimo tego, co inni powiedzieli na temat tej odpowiedzi, to ona spowodowała, że ​​git automatycznie uzupełnia się w terminalu.
Iain

32

Uruchom to na terminalu:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

Następnie zrób to:

vi ~/.bash_profile

Dodaj te linie:

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

To wszystko. To zadziałało dla mnie.


1
(Drugi krok) Jeśli ktoś woli otworzyć plik bash_profile za pomocą edytora tekstu, po prostu zrób to: otwórz -e .bash_profile
Nicolas Bodin-Ripert

2
W dziewiczym Mac OS High Sierra ~/.bash_profileplik nie istnieje. W porządku, po prostu utwórz plik, umieść iftam skrypt i zapisz. Załaduj ponownie swoją skorupę i będzie działać.
agm1984,

11

giti git-completion.bashjuż są dostarczane z narzędziami wiersza poleceń macOS ( xcode-select --install). Aby włączyć autouzupełnianie bash, dodaj to do swojego ~/.bash_profile.

[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

Umożliwi to również autouzupełnianie dla gałęzi git.


Jestem pewien, że zainstalowałem narzędzia wiersza poleceń, ale ten plik nie istnieje w moim przypadku. Ale chętnie korzystam z naparami (a ponieważ mój dupek też jest z naparami, być może też mądrzejszy).
drevicko

Dzięki! IMO, powinna to być odpowiedź z zielonym znacznikiem wyboru.
geekisthenewcool

8

Oto, co dezorientuje niektórych z was: masz zainstalowany browar lub porty, ale używasz systemowego git /usr/bin/. Aby to sprawdzić:

which git

Jeśli widzisz, /usr/bin/gitto albo napar nie jest poprawnie skonfigurowany, albo nie zainstalowałeś git przez napar.

Jeśli zainstalujesz git przez brew, włączenie uzupełniania bash dla parzenia spowoduje również włączenie bash dla git. Wynika to z faktu, że /usr/local/etc/bash_completiontak naprawdę wszystko pobiera /usr/local/bash_completion.d, a pakiet brew dla git instaluje tam skrypt zakończenia git.


Ma to sens, ale w jaki sposób „włączyć uzupełnianie bashów dla naparu”? Nie wiesz, jak to zrobić, powinna to być część twojej odpowiedzi
skplunkerin

Właśnie to zrobiłem (działa, dziękuję) za pośrednictwem uproszczonego.
Guide

4

Możesz zainstalować bash i git z MacPorts z włączoną opcją „bash_completion”. Jest to prawdopodobnie najłatwiejszy sposób utrzymywania aktualności zarówno git, jak i uzupełnień.

http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard

Aby zainstalować MacPorts: http://www.macports.org/install.php/

dodatkowe informacje

Aby znaleźć ustawienia zakończenia w systemie Linux, zajrzyj do /etc/bash_completion.d/git (jest to długi plik). Skopiowanie tego prawdopodobnie nie zadziała, ponieważ zostało zaprojektowane w taki sposób, aby pochodziło ze środowiska uzupełniania poprzez / etc / bash_completion (który pochodzi z /etc/profile.d/bash_completion.sh; pliki w / etc / profile .d pochodzą z / etc / profile).


2

Jeśli ukończenie git jest częściowo zepsute, nawet po sourcingu https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash, może być konieczna aktualizacja wersji git.

Na przykład, gdy wpisałem git check+ TAB, poprawnie wypełniłby się automatycznie git checkout. Ale kiedy wpisałem git checkout+ TAB, nie wyświetlała się tylko lista gałęzi HEAD.

Rozwiązaniem dla mnie była aktualizacja mojej gitwersji. Miałem wersję 2.7.0, która najwyraźniej nie była kompatybilna z najnowszą wersją git-completion.bash. Uruchomiłem brew upgrade git, który zaktualizował go do wersji 2.13.0, a teraz poprawnie uzupełnia nazwy moich oddziałów.


Otrzymywałem ten sam problem, ale musiałem biegać brew upgrade giti brew link git (z włączoną funkcją zastępowania)
Tope

1
Dzięki za złapanie @Tope. Zmieniłem się updatena upgrade.
wisbucky,

2

Jak dotąd najlepsze referencje, które udało mi się rozwiązać, aby rozwiązać ten problem, znajdują się w SpinDance autorstwa Connora Livingstona :

Jeśli skrypt git- complete.bash nie istnieje na twoim komputerze, pobierz go z linku, który podałem powyżej (to jest to ) i zapisz go na swoim komputerze lokalnym w nowym pliku o nazwie git-complete.bash w / katalog usr / local / etc / bash_completion.d / . Jeśli skrypt git- complete.bash istnieje na twoim komputerze, ale nie znajduje się w katalogu /usr/local/etc/bash_completion.d/ , powinniśmy utworzyć jego kopię w tym katalogu. Szybkie sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash powinno załatwić sprawę . Dla tych, którzy są ciekawi /usr/local/etc/bash_completion.d/ katalog: służy do przechowywania nowych poleceń zakończenia i może być konieczne utworzenie go, jeśli nie istnieje jeszcze na komputerze.

W tym momencie skrypt git-complete.bash powinien istnieć na komputerze lokalnym w katalogu /usr/local/etc/bash_completion.d/ . Teraz podłączymy skrypt ukończenia git do bash, wskazując go na ~ / .bash_profile .

Uwaga: tylda w poprzednim zdaniu odnosi się do katalogu domowego na twoim komputerze. Dodaj następujący wiersz do ~ / .bash_profile : source /usr/local/etc/bash_completion.d/git-completion.bash i zapisz. Ostatnim krokiem jest ponowne załadowanie profilu bash. Możesz to osiągnąć, uruchamiając source ~ / .bash_profile w bieżącej sesji bash.


1

Wypróbowałem to i działa dobrze dla gałęzi, ale kiedy zrobisz git st+, tabto pokazuje taki błąd

nieznana opcja: --list-cmds = list-mainporcelain, inne, nohelpers, alias, lista-kompletna, użycie konfiguracji: git [--version] [--help] [-C] [-c =] [--exec -path [=]] [--html-path] [--man-path] [--info-path] [-p | - paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir =] [--work-tree =] [--namespace =] []

Przeszukałem internet i okazało się, że --list-cmdsw .git-completion.bashbyło w najnowszej wersji git i na moim mac wersja git było2.17.2

Oto rozwiązania

Rozwiązanie 1

  1. Sprawdź wersję git za pomocą git --versionpolecenia
  2. Następnie podaj ten sam numer wersji w adresie URL, co ja

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. Następnie wykonaj te same kroki, co w górnej odpowiedzi, wprowadź poniższy kod ~/.bash_profile

    if [ -f ~/.git-completion.bash ]; then
      . ~/.git-completion.bash
    fi

Rozwiązanie 2

Powinieneś spróbować zaktualizować wersję git do najnowszej, to powinna działać.


0

Zainstaluj oh-my-zsh i ustaw zsh jako domyślną powłokę i dziękuję później :)


Zrobiłem to, właśnie w nadziei, że nie będę musiał sobie z tym poradzić - wciąż nie ma sugestii oddziału po naciśnięciu zakładki
Jytug

Tak naprawdę nie potrzebujesz oh-my-zsh , ani nawet osobnego systemu wtyczek! Wypełnianie Git wychodzi z pudełka, wystarczy go włączyć.
SilverWolf

0

Większość użytkowników gitzainstaluje się jako część narzędzi wiersza poleceń xcode w, /usr/bin/gita reguły wypełniania bash dla git będą dostępne na /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash.

W takim przypadku nie trzeba instalować git z Homebrew ani źródłowych reguł uzupełniania git z raw.githubusercontent.com. Wystarczy utworzyć dowiązanie symboliczne w następujący sposób:

cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git

Uwaga: upewnij się, że zainstalowałeś i skonfigurowałeś bash-completionpakiet z Homebrew.


-2

Znajdź swój .bashrcplik.

Otwórz i dodaj ten wiersz na dole:

source /etc/bash_completion.d/git


1
Nie mam nic /etc/bash_completion.d/folderu na stosunkowo nowym systemie (OSX 10.10.3).
livingtech

Spróbuj go utworzyć.
crmpicco,

Nie bash_completion, git_completion, który robi różne rzeczy.
Michael Durrant

@MichaelDurrant To działa. Zaufaj mi. ;) prowrestlingtees.com/media/catalog/product/cache/1/image/…
crmpicco

@crmpicco Czy możesz podać instrukcje tworzenia /etc/bash_completion.d/git? Dzięki temu twoja odpowiedź będzie bardziej cenna.
Dannid,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.