Jak zdobyć git-complete.bash do pracy na Mac OS X?

92

Śledziłem http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without, aby dodać git-completion.bashdo mojego/opt/local/etc/bash_completion.d/git-completion

i PS1='\h:\W$(__git_ps1 "(%s)") \u\$ 'wstawiam mój .bashrc_profile

Ale teraz dostaję to -bash: __git_ps1: command not foundwszystko, co robię cd.

Czy możesz mi powiedzieć, czego mi brakuje?

n179911
źródło
Zobacz także: trac.macports.org/wiki/howto/bash-completion
Ioannis Filippidis

Odpowiedzi:

65

Zainstalowałem git za pomocą MacPorts na mojej nowej instalacji Snow Leopard. Po zainstalowaniu MacPorts z obrazu .dmg byłyby to polecenia w Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Jeśli chcesz także obsługi pobierania z repozytoriów SVN i dokumentów, użyj tego zamiast drugiej linii:

sudo port install git-core +bash_completion +doc +svn

Następnie dodaj do swojego ~ / .profile lub ~ / .bash_profile:

# MacPorts Uzupełnianie poleceń powłoki Bash
if [-f / opt / local / etc / bash_completion]; następnie
    . / opt / local / etc / bash_completion
fi

lub dla MacPorts od wersji 2.1.2 na Mountain Lion:

# MacPorts Uzupełnianie poleceń powłoki Bash
if [-f /opt/local/etc/profile.d/bash_completion.sh]; następnie
  . /opt/local/etc/profile.d/bash_completion.sh
fi

lub dla MacPorts z nowszymi wersjami git:

if [-f /opt/local/share/git-core/git-prompt.sh]; następnie
    . /opt/local/share/git-core/git-prompt.sh
fi

Uwaga: wersja bash 4.1 lub nowsza jest wymagana przez bash_completion.sh. Jeśli zakończenie nie działa, spróbuj echo $BASH_VERSIONsprawdzić, czy to jest problem. Jeśli tak, wpisz bash MacPorts, pisząc bashi spróbuj ponownie wykonać git.

Lara Dougan
źródło
Właśnie skopiowałem wklejony i nadal pojawia się błąd, który ma OP. = \. Jak powiedzieć, co zostało uwzględnione? Nie wierzę, że bash_kompletowanie zostało pozyskane
NullVoxPopuli
Uwaga: w przypadku nowszych wersji git / macport / bash-uzupełniania monit znajduje się w innym pliku. Patrz: trac.macports.org/ticket/36334 if [ -f /opt/local/share/git-core/git-prompt.sh ]; then . /opt/local/share/git-core/git-prompt.sh fi
Yehosef
3
Ponieważ /opt/local/etc/profile.d/bash_completion.shwymaga wersji $BASH_VERSION4.1 lub nowszej, musiałem wykonać następujące czynności w systemie Mac OS X 10.8.3 z MacPorts 2.1.3: Przełączanie powłoki logowania Mac OS X z domyślnej /bin/bash(wersja 3.2.48 (1)) na MacPorts /opt/local/bin/bash(4.2 .42 (2) -release) jak opisano tutaj: stackoverflow.com/a/791244/287984. Zasadniczoif [ `grep /opt/local/bin/bash /etc/shells` ]; then echo /opt/local/bin/bash | chsh -s /opt/local/bin/bash; else echo /opt/local/bin/bash | sudo tee -a /etc/shells; chsh -s /opt/local/bin/bash; fi
Uwe Günther
Działa świetnie dla mnie. Musiałem zastąpić /bin/bashw Terminal.app z /opt/local/bin/bashmacports + wszystkie .bash_profilesugerowane tutaj zmiany.
bgs
1
Aby przejść do wersji bash 4.1 lub nowszej, możesz postępować zgodnie z instrukcjami tutaj: apple.stackexchange.com/questions/70132/…
ThomasW
55

Jeśli zainstalowałeś git za pomocą homebrew, możesz nieco dostosować porady MacPorts i dodać to do swojego .bash_profilei.bashrc

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

Najlepszym sposobem na sprawdzenie, czy poprawnie zainstalowałeś git przy użyciu homebrew ist, aby wykonać

brew info git

i sprawdź dane wyjściowe dla katalogu instalacyjnego zakończenia git bash

Najnowsza wersja Git (1.7.12) również wymaga następujących elementów, aby włączyć monit.

if [ -f `brew --prefix`/etc/bash_completion.d/git-prompt.sh ]; then
    . `brew --prefix`/etc/bash_completion.d/git-prompt.sh
fi
grundprinzip
źródło
Aby uzyskać więcej informacji __git_ps1, zobacz odpowiedź superuser.com/a/477749/90231 w tym stosie.
RichVel
26

Wszystko, co musisz zrobić, to umieścić git-completion.bashplik w binkatalogu osobistym użytkownika i umieścić w tobie .profilelub .bash_profilepliku:

export PATH="$HOME/bin:$PATH"
source ~/bin/git-completion.bash
PS1='[\u@\h \w$(__git_ps1 " (%s)")]\$ '

W ten sposób upewnij się, że Twój lokalny pojemnik znajduje się w ŚCIEŻCE, a sourcepolecenie uruchomi się. Wtedy oczywiście zmiana PS1 powoduje wyświetlenie aktualnie wyewidencjonowanej gałęzi w wierszu polecenia.

Tak więc, nie ma instalacji MacPort, aby zainstalować „kompletną” wersję GIT (szczególnie irytujące, jeśli już ją masz).

iansheridan
źródło
1
Dla tych, którzy zastanawiają się, jak połączyć tę rzecz PS1 z kolorami w monicie, zobacz: stackoverflow.com/questions/816790/…
Nickolay
1
Mówiąc dokładniej, git-complete.bash po prostu musi być gdzieś w twoim $PATH. Postanowiłem umieścić mój, /usr/local/bin/aby nie musiałem modyfikować mojego istniejącego $PATH.
metavida
13

Chociaż obecna odpowiedź jest poprawna dla starszych MacPortów, pojawił się nowy problem z najnowszymi MacPortami, powodujący ten sam błąd.

Obecny pakiet uzupełniający bash (2.0 r1) wymaga przynajmniej bash 4.1 do poprawnego działania. Jak zwykle używa terminal OS X /bin/bash, dostaje tylko 3.x. Musisz zmienić ustawienia terminala, aby używać /opt/local/bin/bash -lzgodnie z opisem w dokumentacji MacPorts tutaj: http://trac.macports.org/wiki/howto/bash-completion

Andy
źródło
To jest najbardziej poprawna odpowiedź, ponieważ problem zacząłem dopiero po aktualizacji Macports. Jedynym minusem korzystania z bash Macports z terminala jest to, że teraz ostrzega mnie przed zakończeniem uruchomionych procesów, gdy próbuję zamknąć okno terminala - czy na to wpadłeś?
vitch
6

Musisz znaleźć funkcje uzupełniania poleceń. Dodaj do swojego .bashrc_profile przed PS1:

. /opt/local/etc/bash_completion.d/git-completion
jtimberman
źródło
git- complete.bash
TJ Biddle,
5

Irytujące zostało to ponownie zerwane. Tym razem to git ludzie z wersją 1.7.12-1. Aby umożliwić ludziom korzystanie z funkcji pytania bez funkcji uzupełniania (co może spowolnić działanie), zmienili funkcję poleceń z bash_completion / git na własny plik git-prompt.sh.

Tak więc dodanie bash_completion zgodnie z opisem @Lara pozwoli Ci tylko ukończyć (naciśnięcie klawisza uzupełnia nazwy tagów / gałęzi).

Aby to __git_ps1zrobić, możesz użyć go w monicie PS1, musisz również dodać następujące elementy do ~ / .profile.

. /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh

Trochę tła jest tutaj - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632

studgeek
źródło
3

Lub z Homebrew

brew install bash-completion git-extras
derek73
źródło
2
Wielkie dzięki. Powinno tak być brew install bash-completion git-extras(myślnik zamiast podkreślenia).
simonair
2

Znajdź rozwiązanie na podobne pytanie :

Git-osx-instalator wyposażony git-completion.bashi instaluje go /usr/local/git/contrib/completion/. Po prostu .bash_profilepobierz ten plik od swojego, aby uzyskać __git_ps1.

John Mellor
źródło
2

W przypadku Mountain Lion i portów Mac musiałem użyć następujących linii w moim .bash_profile, aby uzyskać __git_ps1 i uzupełnienia do normalnego działania:

# Bash shell command completion
if [ -f /opt/local/share/doc/git-core/contrib/completion/git-completion.bash ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-completion.bash
fi

if [ -f /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh
fi
haysclark
źródło
1

Używam naparu, więc bash_completionskrypt główny, który uruchamia wszystkie, bash_completion.dwydaje się nie być dostępny. Rozwiązania, które proponują uruchomienie tylko jednego skryptu w celu dodania uzupełnień git, nie są rozszerzalne, ponieważ różne pakiety dodają różne skrypty ukończenia i prawdopodobnie chcesz je wszystkie uruchomić. Dlatego dodałem to (zaadaptowane z Arch Linuxa) na końcu /etc/bashrc:

# source compat completion directory definitions
BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \
    -x $BASH_COMPLETION_COMPAT_DIR ]]; then
    for i in $(LC_ALL=C command ls "$BASH_COMPLETION_COMPAT_DIR"); do
        i=$BASH_COMPLETION_COMPAT_DIR/$i
        [[ -f $i && -r $i ]] && . "$i"
    done
fi
ecloud
źródło
1

Przynajmniej z Xcode 6 już masz git-completion.bash. Jest w pakiecie aplikacji Xcode.

Po prostu dodaj to do swojego .bashrc:

source `xcode-select -p`/usr/share/git-core/git-completion.bash
jrc
źródło
To była jedyna odpowiedź, która faktycznie dla mnie zadziałała. Inne odpowiedzi powodowały dziwne błędy po wpisaniu niekompletnego polecenia, np.git br<TAB>
r00m
0

Oprócz posta Adama K. Johnsona

Możesz także umieścić następujące ...

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

... w swoim / etc / profilu, jeśli chcesz.

W ten sposób wszyscy użytkownicy w systemie skorzystają ze skryptów uzupełniających bash zainstalowanych w katalogu „/opt/local/etc/bash_completion.d/”.

thekingoftruth
źródło
0

Chociaż powyższa odpowiedź autorstwa grundprinzip z 2011 roku nadal działa dobrze, chciałem dodać bardziej aktualną odpowiedź teraz, gdy jest teraz pakiet bash-uzupełnianie pakietu Homebrew ( formuła , repo ), który czyni to jeszcze łatwiejszym. (Obejmuje to ukończenie git, a także innych typowych narzędzi).

Dzisiaj system macOS jest dostarczany z wersją Bash 3, ale możesz brew install bashuzyskać wersję Bash 4. Jeśli korzystasz z wersji Bash 4, zainstaluj nowszą gałąź 2.x uzupełniania wersji bash.

Bash 4

  1. Biegać:

    brew install bash-completion@2
  2. Dodaj do ~/.bash_profile:

    if [ -f /usr/local/share/bash-completion/bash_completion ]; then
      . /usr/local/share/bash-completion/bash_completion
    fi

Bash 3

Jeśli chcesz trzymać się standardowej wersji 3.x na MacOS, postępuj zgodnie z tymi instrukcjami.

  1. Biegać:

    brew install bash-completion
  2. Dodaj do ~/.bash_profile:

    echo "[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion" >> ~/.bash_profile

Odniesienie: http://davidalger.com/development/bash-completion-on-os-x-with-brew/

Taylor Edmiston
źródło
-2

Myślę, że możesz zapomnieć o źródle pliku podczas logowania .bashrc, możesz dodać coś takiego:

. ./path/to/your/file.ext

Używanie .znaku spacji powoduje uruchomienie pliku w bieżącym kontekście.

cierpienie
źródło