(Mac) -bash: __git_ps1: Befehl nicht gefunden

222

Ich versuche, meine Eingabeaufforderung im Terminal zu ändern. Ich bekomme immer wieder den Fehler:

-bash: __git_ps1: command not found

Ich habe es versucht, indem ich es wie folgt in das Terminal eingegeben habe : __git_ps1. Ich habe es auch in der ausprobiert.bash_profile

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

Wie Sie vielleicht sehen / sagen können, habe ich die automatische Vervollständigung installiert und sie funktioniert hervorragend!

Ich bin auf diese Frage gestoßen : " PS1 env-Variable funktioniert nicht auf Mac ", die den Code gibt

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

Also füge ich es meiner .bash_profileHoffnung hinzu, dass es etwas ändern wird. Nun, das hat es getan. Es hat nur die Fehlerausgabe geändert.

Hier ist das .bash_profilemit dem Zusatz:

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

Und jetzt ist hier die geänderte Fehlerausgabe:

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

Hinweis: Ich habe auch den Alias ​​ohne Unterschied unter die Quelle verschoben. Ich habe Git Version 1.7.12.1

Dies sollte eine einfache Änderung sein. Kann mir bitte jemand helfen?

Bearbeiten 13.10.12

Nein, ich möchte __git_ps1 definitiv nicht selbst definieren, sondern habe nur versucht zu sehen, ob es dadurch erkannt wird. Ja, ich habe die .git-completion.bashDatei installiert. So habe ich die automatische Vervollständigung auf meinem Computer erhalten.

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

A ls -lalistet dann die .git-completion.bashDatei auf.

Edit 13.10.12 - Gelöst von Mark Longair (unten)

Der folgende Code hat bei mir funktioniert, .bash_profilewährend andere nicht ...

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
fi
Geoff
quelle
Mein git-completion.bashdefiniert __git_ps1als Shell-Funktion. Ist deins? Woher wissen Sie, dass die Fertigstellung funktioniert? Was passiert, wenn Sie git h<TAB> eingeben?
Rob Mayoff
Wenn ich das tippe, endet es mit Git Help [Space]
Geoff
Die akzeptierte Antwort ist gut, aber die Eingabeaufforderung kann auch durch Drücken aktiviert werden, git <tab>wie in dem von Mark Longair referenzierten Commit angegeben.
Jack Frost
Dies ist nicht nur eine gute explizite Frage, sondern auch eine hilfreiche Ressource, die zur Lösung führt. Eine wohlverdiente Gegenstimme.
Yannis Dran
Die Überprüfung -f hat diesen Fehler behoben, wenn Bash innerhalb von Bildschirm (1) unter OS X 10.8.5 ausgeführt wurde. Keine Ahnung warum, da die Datei trotzdem existierte, aber trotzdem danke!
Nick K9

Antworten:

324

Sie haben die Version von git-completion.bashfrom installiert master- im Entwicklungsverlauf von git erfolgt dies nach einem Commit, bei dem die __git_ps1Funktion von der Abschlussfunktion in eine neue Datei ( git-prompt.sh) aufgeteilt wurde. Das Commit, das diese Änderung eingeführt hat und das die Gründe erklärt, ist af31a456 .

Ich würde immer noch vorschlagen, dass Sie nur die Version von git-completion.bash(oder git-prompt.sh) beziehen, die mit Ihrer Installation von git gebündelt ist.

Wenn Sie diese Funktionalität jedoch aus irgendeinem Grund weiterhin mithilfe von Skripten verwenden möchten, die separat von heruntergeladen wurden master, sollten Sie Folgendes herunterladen git-prompt.sh:

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

... und fügen Sie die folgende Zeile hinzu ~/.bash_profile:

source ~/.git-prompt.sh

Dann sollte Ihre PS1Variable, die enthält, gut __git_ps1 '%s'funktionieren.

Mark Longair
quelle
Sie haben Recht, dass ich __git_ps1 nicht selbst definieren möchte. Ich habe nur versucht zu sehen, ob es es erkennen würde und es nicht. Ich habe .git-complete.bash auf meiner Wurzel. Ich werde meine Frage oben aktualisieren, um einzuschließen, wie ich die automatische Vervollständigung zum Laufen gebracht habe ...
Geoff
@ designer84: danke für die zusätzlichen Informationen - ich denke, es ist jetzt klar, wo das Problem liegt, und ich habe meine Antwort mit einer Erklärung aktualisiert.
Mark Longair
Warum funktioniert das nicht? if [-f /usr/local/git/contrib/completion/git-completion.bash]; dann Quelle /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff
5
Unter OSX 10.9 mit Git 1.8.5.3, das über Homebrew installiert wurde, befinden sich beide git-prompt.shund git-completion.bashin `brew --prefix git`/etc/bash_completion.d/.
Dokkaebi
1
In MacPorts änderte sich der Pfad, als das Paket git-coredurch ersetzt wurde git. Siehe diese Frage
Ramon de la Fuente
60

Nach dem Upgrade auf OSX 10.9 Mavericks musste ich auf die folgenden Dateien verweisen, um den Abschluss des Git-Shell-Befehls und die Git-Eingabeaufforderung zu erhalten.

Aus meinem .bash_profile oder ähnlichem:

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
quelle
Dies war auch mein Problem in OSV 10.9
Jeremyjjbrown
Obwohl die akzeptierte Antwort von @marklongair eine gute Beschreibung ist, habe ich diese Frage über eine Google-Suche nach einer Fehlermeldung gefunden (nach dem Upgrade auf OS 10.10). Diese Antwort ist die einfachste Lösung für mein Problem (einfach den Pfad zum neuen Speicherort ändern) ).
RedBassett
Dies funktionierte für mich in 10.10.5 Yosemite, aber ich habe den Speicherort von git-prompt in geändert ~/.git_prompt.sh. Die anderen Lösungen haben nicht funktioniert.
Rein
Ich habe Ihre vorgeschlagenen Zeilen zu .bash_profile hinzugefügt, erhalte aber immer noch den Fehler:bash: __docker_machine_ps1: command not found
IgorGanapolsky
43

Du solltest

$ Brew Bash installieren Bash-Completion Git

Geben Sie dann "$ (Brew - Präfix) / etc / bash_completion" in Ihre .bashrc ein.

Steven Shaw
quelle
Tolle Antwort, definitiv der beste Weg, wenn Git mit Brew installiert wird. Aber ich denke, Sie müssen dies beschaffen: Quelle $ (Brew
Präfix
1
@febLey Ja, der Ort hat sich geändert. Ich habe die Antwort aktualisiert. Vielen Dank.
Steven Shaw
Das funktioniert nicht. Ich erhalte Fehler: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: Berechtigung verweigert bash: __docker_machine_ps1: Befehl nicht gefunden
IgorGanapolsky
14

Folgendes hat für mich wie ein Zauber gewirkt:

Führen Sie in Ihrem Terminal Folgendes aus:

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

Öffnen / Erstellen von bash_profile:

$ vi ~/.bash_profile

Fügen Sie der Datei Folgendes hinzu:

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"

Schließlich beschaffen Sie es mit:

$ source ~/.bash_profile

Dies wird das Problem von lösen bash: __git_ps1: command not found.

Auch Ihre Eingabeaufforderung ändert sich in "os". Um "os" in etwas anderes zu ändern, ändern Sie die Zeichenfolge "os" in der PS1-Exportzeile.

Usman
quelle
Ich erhalte immer noch die Fehlermeldung sh -c "clear && / bin / bash" bash: __docker_machine_ps1: Befehl wird nicht jedes Mal gefunden, wenn ich Docker CLI eingebe .
IgorGanapolsky
8

Lösung für MacOS Sierra und Git Version 2.10.1 <2017-2-06>

Schritt 1: Installieren Sie den Git

Sie können diesen Schritt überspringen, wenn Sie bereits das neueste Git installiert haben.

Laden Sie das Git-Paket vom Browser https://git-scm.com/download/ herunter.

Hinweis: Wenn Sie mit der curl [option] https://...Option zum Herunterladen installieren , müssen Sie sicherstellen, dass Ihr System SSL unterstützt. Für Neueinsteiger ist es daher viel einfacher, vom Browser herunterzuladen und direkt vom Git-Installationsprogramm zu installieren.

Installationsüberprüfung:
  • Zeigen Sie, wo sich Ihr Git-Verzeichnis befindet unter: which git
  • Zeigen Sie, welche Version Ihr Git aktuell ist: Die git --versionaktuelle Version sollte 2.10.1 sein.

Schritt 2: Fügen Sie Ihr Git-Profil zu Ihrer Shell hinzu

  1. Öffnen Sie Ihr Shell-Profil:
    • nano ~/.bash_profileoder nano ~/.bashrcHängt davon ab, wo sich Ihre Änderung befindet.
  2. Fügen Sie der Datei den folgenden Code hinzu:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Hinweis: Der Installationsort von git wurde nach dem OSX-Upgrade auf El Capitain von opt / directory in usr / local / geändert. Aus diesem Grund funktionieren einige der alten Antworten in MacOS Sierra nicht mehr.

  1. Füge deiner PS1-Konfiguration den folgenden Code hinzu:

    • Option 1: direkt zu deiner PS1 hinzufügen: export PS1='\w$(__git_ps1 "(%s)") > '

      Ich bevorzuge diesen einfachen Ansatz, da ich bereits weiß, dass sich das .git-completion.bashin meinem Home-Verzeichnis befindet, und ich kann ein anderes Eingabeaufforderungsformat davor hinzufügen. Hier ist meine persönliche Eingabeaufforderung für Ihre Referenz:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Option 2: Fügen Sie ein Auswahlskript hinzu

    if [-f ~ / .git-vervollständigung.bash]; dann
          export PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    fi
  2. Speichern und verwenden Sie das Profil: source ~/.bash_profileodersource ~/.bashrc

Jetzt sollte die Git-Eingabeaufforderung ordnungsgemäß funktionieren und zeigt, in welchem ​​Zweig Sie sich gerade befinden.

quelle
5

Ich hatte das gleiche Problem beim Upgrade auf Yosemite.

Ich musste nur ~/.bashrcauf source /usr/local/etc/bash_completion.d/git-prompt.shanstelle des alten Pfades ändern .

Geben Sie dann eine neue Quelle ein . ~/.bashrc, um den Effekt zu erzielen.

chovy
quelle
5

High Sierra saubere Lösung mit Farben!

Keine Downloads. Kein Gebräu. Kein Xcode

Fügen Sie es einfach Ihrem ~ / .bashrc oder ~ / .bash_profile hinzu

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
quelle
4

__git_ps1 für bash befindet sich jetzt in git-prompt.sh in /usr/local/etc/bash_completion.d auf meiner von Brew installierten Git-Version 1.8.1.5

Tag
quelle
2

Dies funktioniert unter OS 10.8 im .bash_profile

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='YOURNAME[\W]$(__git_ps1 "(%s)"): '
fi
schlüpfriger
quelle
Behebt
IgorGanapolsky
2

Für Macports musste ich hinzufügen: source /opt/local/share/git-core/git-prompt.shzu meinem ./profile

velop
quelle
1
@IgorGanapolsky Ich denke, Sie haben keine Macports installiert? Einfach machen touch ~/.profile. Aber Sie brauchen offensichtlich eine Datei in: /opt/local/share/git-core/git-prompt.sh
velop
2

Wenn Sie hoffen, mit Homebrew Git zu aktualisieren, und Ihr System generell veraltet ist (wie ich), müssen Sie möglicherweise Homebrew selbst zuerst auf den neuesten Stand bringen (gemäß Brew-Update) : Die folgenden nicht verfolgten Arbeitsbaumdateien würden durch Zusammenführen überschrieben: danke @ chris-frisina)

Bringen Sie Homebrew zuerst mit der aktuellen Version in Einklang

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

Dann aktualisiere Git:

Brew Upgrade Git

Problem gelöst! ;-);

Tag Davis Waterbury
quelle
2

Zumindest mit Xcode 6 haben Sie bereits git-completion.bash . Es befindet sich im Xcode-App-Bundle.

Fügen Sie dies einfach Ihrer .bashrc hinzu:

source `xcode-select -p`/usr/share/git-core/git-completion.bash
jrc
quelle
2
  1. Laden Sie die Dateien git-prompt.sh und git-Completion.bash von dieser Git-Vervollständigung herunter
  2. Benennen Sie die Dateien um.
  3. Verschieben Sie diese Dateien in Ihr Home-Verzeichnis.
  4. Fügen Sie die Quelldatei zum .bash_profile hinzu

    source ~/git-completion0.bash
    source ~/git-prompt0.sh
    and four to trigger the code block.
    
JCLopez
quelle
1

Ich weiß, dass es keine echte Antwort ist ...

Ich hatte einige seltsame Probleme mit der Beschaffung von git-prompt.sh in meiner .bashrc, also fing ich an, nach einer anderen Lösung zu suchen. Dieser: http://www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-prompt/ verwendet __git_ps1 nicht und der Autor behauptet, dass es auch funktioniert auf dem Mac (im Moment funktioniert es perfekt auf meinem Ubuntu und es ist einfach zu optimieren).

Ich hoffe, es hilft!

op1ekun
quelle
1

Ich habe den Kurs über Udacity für Git Hub gemacht und hatte das gleiche Problem. Hier ist mein endgültiger Code, mit dem make korrekt funktioniert.

# 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"

Es klappt! https://i.stack.imgur.com/d0lvb.jpg

Superheld
quelle
0

Dieser hat für mich funktioniert, und er hat eine farbige Git-Ausgabe und einen Indikator in der Eingabeaufforderung, ob Dateien geändert / hinzugefügt wurden, direkt eingebrannt:

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\]\$ '

Achten Sie darauf, den richtigen Pfad zu verwenden! Ich habe Homebrew verwendet, um Git zu installieren brew list gitund den Pfad zu Ihrer aktuellen Installation zu ermitteln.

Es wäre schön, keinen fest codierten Pfad zu verwenden, aber ich weiß nicht, wie ich den Pfad zur aktuellen Installation erhalten soll.

Weitere Infos hier: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/

Joshua Muheim
quelle
0

Für Git gibt es /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. Und bitte schauen Sie /etc/bashrc_Apple_Terminalauch.

Also habe ich diese eingegeben ~/.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
quelle
Immer noch diesen Fehler:bash: __docker_machine_ps1: command not found
IgorGanapolsky
0

Vorwort: Tut mir leid, dass ich die Antwort von haysclark nicht kommentiert und eine neue gemacht habe, einfach nicht genug Wiederholung.

Bitte nicht, wenn Sie git nicht über Xcode oder Home-Brew installiert haben, werden Sie wahrscheinlich die Bash-Skripte finden, auf die sich haysclarks bezieht /Library/Developer/CommandLineTools/, und nicht in /Applications/Xcode.app/Contents/Developer/, wodurch die Zeilen in .bashrc wie folgt aufgenommen werden:

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

Sie benötigen diese Zeilen, wenn Sie auch git-prompt verwenden möchten.

Simone Chiesi
quelle