(Mac) -bash: __git_ps1: nie znaleziono polecenia

222

Próbuję zmienić polecenie polecenia w terminalu. Wciąż pojawia się błąd:

-bash: __git_ps1: command not found

Próbowałem go po prostu przez wpisanie jej do terminala jak: __git_ps1. Próbowałem też tego w.bash_profile

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

Jak możesz zobaczyć / powiedzieć, tak, mam zainstalowane automatyczne uzupełnianie i działa świetnie!

Natknąłem się na to pytanie: „ Zmienna env PS1 nie działa na komputerze Mac ”, co daje kod

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

Dodaję to do mojej .bash_profilenadziei, że coś to zmieni. No cóż. Właśnie zmieniło wyjście błędu.

Oto .bash_profilez dodatkiem:

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

A teraz jest zmieniony wynik błędu:

sed: (%s): No such file or directory

Uwaga: przesunąłem również alias poniżej źródła, bez różnicy. Mam wersję git 1.7.12.1

To powinna być prosta zmiana. Czy ktoś może mi pomóc?

Edytuj 10/13/12

Nie, zdecydowanie nie chcę sam definiować __git_ps1, ale po prostu starałem się sprawdzić, czy można to rozpoznać. Tak, mam .git-completion.bashplik zainstalowany. Oto jak mam automatyczne uzupełnianie na moim komputerze.

cd ~
curl -OL https://github.com/git/git/raw/master/contrib/completion/git-completion.bash
mv ~/git.completion.bash ~/.git-completion.bash

A ls -lanastępnie wyświetla .git-completion.bashplik.

Edytuj 10/13/12 - Rozwiązany przez Mark Longair (poniżej)

Poniższy kod działał dla mnie, .bash_profilepodczas gdy inni nie ...

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
fi
Geoff
źródło
Mój git-completion.bashdefiniuje się __git_ps1jako funkcję powłoki. Czy twoja Skąd wiesz, że ukończenie działa? Co się stanie, gdy wpiszesz git h<TAB>?
rob mayoff
Kiedy to piszę, kończy się to pomocą git help [spacja]
Geoff,
Zaakceptowana odpowiedź jest dobra, ale monit można również włączyć, naciskając git <tab>zgodnie z zatwierdzeniem wymienionym przez Marka Longaira.
Jack Frost
To nie tylko dobre wyjaśnienie, ale także pomocny zasób prowadzący do rozwiązania. Zasłużone głosowanie.
Yannis Dran
Sprawdzanie -f działało, aby naprawić ten błąd podczas uruchamiania bash wewnątrz screen (1) w OS X 10.8.5. Nie mam pojęcia dlaczego, skoro plik istniał niezależnie, ale mimo wszystko dziękuję!
Nick K9,

Odpowiedzi:

324

Zainstalowałeś wersję git-completion.bashfrom master- w historii programowania git dzieje się to po zatwierdzeniu, które podzieliło __git_ps1funkcję z funkcji uzupełniania na nowy plik ( git-prompt.sh). Zatwierdzenie, które wprowadziło tę zmianę, która wyjaśnia uzasadnienie, to af31a456 .

Nadal sugerowałbym, abyś po prostu zaopatrzył się w wersję git-completion.bash(lub git-prompt.sh) dołączoną do instalacji git.

Jeśli jednak z jakiegoś powodu nadal chcesz korzystać z tej funkcji, używając skryptów pobranych osobno master, powinieneś pobrać git-prompt.shpodobnie:

curl -o ~/.git-prompt.sh \
    https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

... i dodaj następujący wiersz do ~/.bash_profile:

source ~/.git-prompt.sh

Wtedy twoja PS1zmienna, która zawiera __git_ps1 '%s'powinna działać dobrze.

Mark Longair
źródło
Masz rację, że nie chcę sam definiować __git_ps1. Próbowałem tylko zobaczyć, czy to rozpozna, a nie rozpozna. Mam .git-complete.bash w moim katalogu głównym. Zaktualizuję moje pytanie powyżej, aby uwzględnić sposób, w jaki działam automatyczne uzupełnianie ...
Geoff,
@ designer84: dziękuję za dodatkowe informacje - myślę, że teraz jest jasne, na czym polega problem, i zaktualizowałem odpowiedź o wyjaśnienie.
Mark Longair,
Dlaczego to nie działa? if [-f /usr/local/git/contrib/completion/git-completion.bash]; następnie źródło /usr/local/git/contrib/completion/git-completion.bash eksport PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff
5
Na OSX 10.9 z zainstalowanym git 1.8.5.3, zarówno poprzez Homebrew git-prompt.shi git-completion.bashznajdują się w `brew --prefix git`/etc/bash_completion.d/.
dokkaebi
1
W MacPorts ścieżka zmieniła się, gdy pakiet git-corezostał zastąpiony przez git, patrz to pytanie
Ramon de la Fuente
60

Po aktualizacji do OSX 10.9 Mavericks musiałem odwołać się do następujących plików, aby uzyskać zakończenie poleceń git shell i monit git do ponownego uruchomienia.

Z mojego .bash_profile lub podobnego:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash ]; then
    . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash
fi

source /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh

#shell prompt example
PS1='\u $(__git_ps1 "(%s)")\$ '
haysclark
źródło
To był również mój problem w OSV 10.9
jeremyjjbrown
Chociaż zaakceptowana odpowiedź @marklongair jest dobrym opisem, znalazłem to pytanie, wyszukując w Google komunikat o błędzie (po aktualizacji do OS 10.10), a ta odpowiedź jest najprostszym rozwiązaniem mojego problemu (po prostu zmiana ścieżki do nowej lokalizacji ).
RedBassett
Działa to dla mnie w 10.10.5 Yosemite, jednak zmieniłem lokalizację git-prompt na ~/.git_prompt.sh. Inne rozwiązania nie działały.
Rein
Dodałem twoje sugerowane linie do .bash_profile , ale nadal bash: __docker_machine_ps1: command not found
pojawia się
43

Powinieneś

$ brew zainstaluj bash bash-zakończeniu git

Następnie wpisz „$ (brew --prefix) / etc / bash_completion” w swoim .bashrc.

Steven Shaw
źródło
Świetna odpowiedź, zdecydowanie najlepszy sposób, jeśli git jest zainstalowany z naparem. Ale myślę, że musisz to źródło: source $ (brew --prefix) /etc/bash_completion.d/git-prompt.sh
febLey
1
@febLey Tak, lokalizacja uległa zmianie. Zaktualizowałem odpowiedź. Dzięki.
Steven Shaw
To nie działa Dostaję błędy: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: Odmowa dostępu bash: __docker_machine_ps1: komenda nie znaleziona
IgorGanapolsky
14

Poniższe działało dla mnie jak urok:

Uruchom następujące w swoim terminalu:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

Otwórz / Utwórz profil bash:

$ vi ~/.bash_profile

Dodaj następujące do pliku:

source ~/.bash_git
export PS1='\[\033[01;32m\]os \[\033[01;34m\]\w $(__git_ps1 "[%s]")\$\[\033[00m\] '
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"

Wreszcie, za pomocą:

$ source ~/.bash_profile

To rozwiąże problem bash: __git_ps1: command not found.

Również twój monit zmieni się na „os”. Aby zmienić „os” na coś innego, zmodyfikuj ciąg „os” w linii eksportu PS1.

Usman
źródło
Nadal pojawia się błąd sh -c „wyczyść && / bin / bash” bash: __docker_machine_ps1: komenda nie została znaleziona za każdym razem, gdy wchodzę do Docker CLI.
IgorGanapolsky
8

Rozwiązanie dla MacOS Sierra i git w wersji 2.10.1 <2017-2-06>

Krok 1: Zainstaluj Git

Możesz pominąć ten krok, jeśli masz już zainstalowany najnowszy git.

Pobierz pakiet git z przeglądarki https://git-scm.com/download/

Uwaga: jeśli instalujesz z curl [option] https://...opcją pobierania, musisz upewnić się, że Twój system obsługuje SSL. Tak więc dla nowego przybysza pobieranie z przeglądarki i instalacja bezpośrednio z git installera jest znacznie łatwiejsze.

Weryfikacja instalacji:
  • Pokaż gdzie jest twój katalog git pod adresem: which git
  • Pokaż, która wersja jest obecnie twoja git: git --versionbieżąca wersja powinna być 2.10.1.

Krok 2: Dodaj swój profil git do powłoki

  1. Otwórz swój profil powłoki:
    • nano ~/.bash_profilelub nano ~/.bashrcZależy od tego, gdzie jest twoja modyfikacja.
  2. Dodaj następujący kod do pliku:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Uwaga: zmieniono lokalizację instalacji git z opt / directory na usr / local / po aktualizacji OSX do El Capitain, i dlatego niektóre z powyższych odpowiedzi nie działają już w MacOS Sierra.

  1. Dodaj następujący kod do konfiguracji PS1:

    • Opcja 1: dodaj bezpośrednio do PS1: export PS1='\w$(__git_ps1 "(%s)") > '

      Wolę to proste podejście, ponieważ już wiem, że .git-completion.bashjest ono w moim katalogu domowym i mogę dodać inny format zachęty z przodu. oto mój osobisty monit o odniesienie:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Opcja 2: Dodaj skrypt wyboru

    if [-f ~ / .git-complete.bash]; następnie
          eksport PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    fi
  2. Zapisz i użyj profilu: source ~/.bash_profilelubsource ~/.bashrc

Teraz powinieneś zobaczyć poprawne działanie git i pokazuje, w której gałęzi jesteś teraz.

źródło
5

Miałem ten sam problem podczas aktualizacji do Yosemite.

Musiałem tylko zmienić ~/.bashrcna source /usr/local/etc/bash_completion.d/git-prompt.shzamiast starej ścieżki.

następnie ponownie . ~/.bashrczaopatrz się, aby uzyskać efekt.

chovy
źródło
5

High Sierra czyste rozwiązanie z kolorami!

Brak pobierania. Bez naparu. Brak Xcode

Po prostu dodaj go do swojego ~ / .bashrc lub ~ / .bash_profile

export CLICOLOR=1
[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
export GIT_PS1_SHOWCOLORHINTS=1
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"
PROMPT_COMMAND='__git_ps1 "\h:\W \u" "\\\$ "'
luzik
źródło
4

__git_ps1 dla bash znajduje się teraz w git-prompt.sh w /usr/local/etc/bash_completion.d na moim napoju zainstalowanym git w wersji 1.8.1.5

traday
źródło
2

działa to w OS 10.8 w .bash_profile

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='YOURNAME[\W]$(__git_ps1 "(%s)"): '
fi
drzemka
źródło
Nie naprawia błędu: bash: __docker_machine_ps1: nie znaleziono polecenia
IgorGanapolsky
2

W przypadku Macports musiałem dodać: source /opt/local/share/git-core/git-prompt.shdo mojego ./profile

velop
źródło
1
@IgorGanapolsky Chyba nie masz zainstalowanych Macports ? Po prostu zrób touch ~/.profile. Ale oczywiście trzeba plik w: /opt/local/share/git-core/git-prompt.sh
velop
2

Jeśli masz nadzieję, że użyjesz Homebrew do uaktualnienia Git i ogólnie pozwolisz, aby Twój system przestał być aktualny (tak jak ja), być może będziesz musiał najpierw zaktualizować sam Homebrew (zgodnie z aktualizacją naparu : Następujące nieśledzone pliki działającego drzewa zostałyby zastąpione przez scalenie: dzięki @ chris-frisina)

Najpierw dostosuj Homebrew do aktualnej wersji

cd / usr / local
git fetch origin
git reset --hard origin / master

Następnie zaktualizuj Git:

git aktualizacji brew

Problem rozwiązany! ;-)

Dzień Davis Waterbury
źródło
2

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
2
  1. Pobierz pliki git-prompt.sh i git- complete.bash z tego zakończenia Git
  2. Zmień nazwę plików.
  3. Przenieś te pliki do katalogu domowego.
  4. Dodaj plik źródłowy do pliku .bash_profile

    source ~/git-completion0.bash
    source ~/git-prompt0.sh
    and four to trigger the code block.
    
JCLopez
źródło
1

Wiem, że to nie jest prawdziwa odpowiedź ...

Miałem dziwne problemy z pozyskiwaniem git-prompt.sh w moim .bashrc, więc zacząłem szukać innego rozwiązania. Ten: http://www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-prompt/ nie używa __git_ps1, a autor twierdzi, że działa również na Macu (na razie działa idealnie na moim Ubuntu i łatwo go ulepszyć).

Mam nadzieję, że to pomoże!

op1ekun
źródło
1

Robiłem kurs na Udacity dla git hub i miałem ten sam problem. Oto mój końcowy kod, który sprawia, że ​​działa poprawnie.

# Change command prompt
alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \ .   (.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
# '\u' adds the name of the current user to the prompt
# '\$(__git_ps1)' adds git-related stuff
# '\W' adds the name of the current directory
export PS1="$purple\u$green\$(__git_ps1)$blue \W $ $reset"

To działa! https://i.stack.imgur.com/d0lvb.jpg

superheron
źródło
0

Ten działał dla mnie i ma kolorowe wyjście git oraz wskaźnik w pytaniu, czy pliki zostały zmienione / dodane, odpowiednio upieczone:

GIT_PS1_SHOWDIRTYSTATE=true

. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-completion.bash
. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-prompt.sh

PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

Pamiętaj, aby użyć prawidłowej ścieżki! Użyłem homebrew, aby zainstalować git, użyj, brew list gitaby uzyskać ścieżkę do bieżącej instalacji.

Byłoby miło nie używać twardej ścieżki, ale nie wiem, jak uzyskać ścieżkę do bieżącej instalacji.

Więcej informacji tutaj: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/

Joshua Muheim
źródło
0

Dla gita są /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. I proszę spojrzeć/etc/bashrc_Apple_Terminal też .

Więc umieszczam je w ~/.bash_profile:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh ]; then
  . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh
  export GIT_PS1_SHOWCOLORHINTS=1
  export GIT_PS1_SHOWDIRTYSTATE=1
  PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }__git_ps1 '\u:\w' '\\\$ '"
fi
liudongmiao
źródło
Nadal bash: __docker_machine_ps1: command not found
pojawia
0

Przedmowa: przepraszam, że nie skomentowałem odpowiedzi haysclarka i nie napisałem od nowa, po prostu za mało powtórzeń.

Proszę nie pamiętać, że jeśli nie zainstalowałeś git przez Xcode lub home-brew, prawdopodobnie znajdziesz skrypty bash, do których odwołuje się haysclarks w /Library/Developer/CommandLineTools/, a nie w /Applications/Xcode.app/Contents/Developer/, dzięki czemu linie będą zawierać w .bashrc następujące elementy:

if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then
    . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
fi

source /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh

Będziesz potrzebował tych linii, jeśli chcesz również użyć git-prompt.

Simone Chiesi
źródło