Wie bekomme ich git-completion.bash für Mac OS X?


92

Ich bin http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live- gefolgt git-completion.bash, ohne meinen hinzuzufügen/opt/local/etc/bash_completion.d/git-completion

und ich habe PS1='\h:\W$(__git_ps1 "(%s)") \u\$ 'mein .bashrc_profile eingetragen

Aber jetzt bekomme ich das -bash: __git_ps1: command not foundalles , was ich tue cd.

Kannst du mir bitte sagen, was ich vermisse?


Antworten:


65

Ich habe git mit MacPorts auf meiner neuen Snow Leopard-Installation installiert. Nach der Installation von MacPorts über das .dmg-Image sind dies die Befehle in Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Wenn Sie auch das Abrufen von SVN-Repositorys und -Dokumenten unterstützen möchten, verwenden Sie dies anstelle der zweiten Zeile:

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

Fügen Sie dann Folgendes zu Ihrem ~ / .profile oder ~ / .bash_profile hinzu:

# Abschluss des MacPorts Bash-Shell-Befehls
if [-f / opt / local / etc / bash_completion]; dann
    . / opt / local / etc / bash_completion
fi

oder für MacPorts seit Version 2.1.2 auf Mountain Lion:

# Abschluss des MacPorts Bash-Shell-Befehls
if [-f /opt/local/etc/profile.d/bash_completion.sh]; dann
  . /opt/local/etc/profile.d/bash_completion.sh
fi

oder für MacPorts mit neueren Versionen von git:

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

Hinweis: bash 4.1 oder höher wird von bash_completion.sh benötigt. Wenn die Fertigstellung nicht funktioniert, versuchen Sie echo $BASH_VERSION, festzustellen, ob dies das Problem ist. Geben Sie in diesem Fall MacPorts bash ein bashund wiederholen Sie den Vorgang.


Ich kopiere gerade eingefügt, und ich erhalte immer noch den Fehler, den das OP hat. = \. Wie erfährst du, was aufgenommen wurde? Ich glaube nicht, dass bash_completion bezogen wird
NullVoxPopuli

Beachten Sie bei neueren Versionen von git / macport / bash-completion, dass sich die Eingabeaufforderung in einer anderen Datei befindet. Siehe: 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
Weil /opt/local/etc/profile.d/bash_completion.shBedürfnisse $BASH_VERSION4.1 oder besser, ich hatte mit MacPorts die folgenden auf einem Mac OS X 10.8.3 zu tun 2.1.3: Schalten Sie den Mac OS X - Login - Shell von seinem Standard /bin/bash(3.2.48 (1) -release) zu MacPorts /opt/local/bin/bash(4.2 .42 (2) -Release) wie hier beschrieben: stackoverflow.com/a/791244/287984. Grundsätzlichif [ `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

Hat super für mich funktioniert. Musste /bin/bashin Terminal.app durch /opt/local/bin/bashvon MacPorts + alle .bash_profilehier vorgeschlagenen Änderungen ersetzen .
bgs

1
Um zu Bash 4.1 oder höher zu wechseln, folgen Sie den Anweisungen hier: apple.stackexchange.com/questions/70132/…
ThomasW

55

Wenn Sie git mit Homebrew installiert haben, passen Sie möglicherweise die MacPorts-Ratschläge ein wenig an und fügen Sie diese zu Ihrem .bash_profileund hinzu.bashrc

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

Der beste Weg, um zu überprüfen, ob Sie git mit homebrew korrekt installiert haben, ist die Ausführung

brew info git

und überprüfe die Ausgabe für das Installationsverzeichnis der git bash Vervollständigung

Die neueste Version von Git (1.7.12) erfordert außerdem Folgendes, um die Eingabeaufforderung zu aktivieren.

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

Weitere Informationen finden__git_ps1 Sie unter superuser.com/a/477749/90231 answer in this stack.
RichVel

26

Alles, was Sie tun müssen, ist, die git-completion.bashDatei in Ihrem Benutzer-Ausgangsverzeichnis binabzulegen und Folgendes in Sie .profileoder Ihre .bash_profileDatei abzulegen:

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

Damit stellen Sie sicher, dass sich Ihr lokaler Bin im PATH befindet und der sourceBefehl die Dinge in Gang setzt. Dann setzt die PS1-Änderung natürlich den aktuell ausgecheckten Zweig in die Eingabeaufforderung.

Es muss also kein MacPort installiert werden, um dann die "Vervollständigungs" -Version von GIT zu installieren (besonders ärgerlich, wenn Sie sie bereits installiert haben).



1
Für diejenigen, die sich fragen, wie Sie dieses PS1-Ding mit Farben in Ihrer Eingabeaufforderung kombinieren können, siehe: stackoverflow.com/questions/816790/…
Nickolay,

1
Genauer gesagt, git-completion.bash muss sich nur irgendwo in Ihrem befinden $PATH. Ich entschied mich, meine /usr/local/bin/einzubauen, damit ich meine bestehende nicht ändern musste $PATH.
Metavida

13

Während die aktuelle Antwort für ältere MacPorts korrekt ist, gibt es ein neues Problem, bei dem die aktuellsten MacPorts denselben Fehler verursachen.

Das aktuelle Bash-Completion- Paket (2.0 r1) erfordert mindestens eine Bash 4.1, um ordnungsgemäß zu funktionieren. Wie ein gewöhnliches OS X Terminal /bin/bashbekommt es nur ein 3.x. Sie müssen die Terminaleinstellungen ändern, um sie /opt/local/bin/bash -lwie in der MacPorts-Dokumentation beschrieben zu verwenden : http://trac.macports.org/wiki/howto/bash-completion


Dies ist die richtigste Antwort, da ich das Problem erst nach der Aktualisierung von Macports hatte. Der einzige Nachteil bei der Verwendung von macports bash vom Terminal ist, dass ich jetzt vor dem Beenden laufender Prozesse gewarnt werde, wenn ich versuche, mein Terminalfenster zu schließen - sind Sie darauf gestoßen?
9.


5

Ärgerlicherweise wurde dies noch einmal gebrochen. Diesmal sind es die Git-Leute mit der Version 1.7.12-1. Damit die Benutzer nur die Eingabeaufforderungsfunktionalität ohne die Beendigungsfunktionalität verwenden können (was zu einer Verlangsamung führen kann), haben sie die Eingabeaufforderungsfunktionalität aus bash_completion / git in ihre eigene Datei git-prompt.sh überarbeitet.

Wenn Sie also bash_completion wie von @Lara beschrieben hinzufügen, erhalten Sie nur den Abschluss (wenn Sie auf die Registerkarte klicken, werden die Tag- / Zweignamen vervollständigt).

Um das zu erhalten, __git_ps1damit du es in deiner PS1-Eingabeaufforderung verwenden kannst, musst du deinem ~ / .profile auch Folgendes hinzufügen.

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

Hintergrundinformationen finden Sie hier: https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632



3

Oder mit Homebrew

brew install bash-completion git-extras

2
Danke vielmals. Es sollte aber sein brew install bash-completion git-extras(Bindestrich statt Unterstrich).
Simonair


2

Für Mountain Lion und Mac-Ports musste ich die folgenden Zeilen in meinem .bash_profile verwenden, damit sowohl __git_ps1 als auch completions normal ausgeführt werden:

# 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

1

Ich benutze brew, daher scheint ein Master- bash_completionSkript, das alle ausführt bash_completion.d, nicht zur Verfügung zu stehen. Die Lösungen, die nur die Ausführung eines einzelnen Skripts zum Hinzufügen von Git-Vervollständigungen vorschlagen, sind nicht erweiterbar, da verschiedene Pakete unterschiedliche Vervollständigungsskripts hinzufügen und Sie wahrscheinlich alle ausführen möchten. Deshalb habe ich dies (angepasst von Arch Linux) am Ende von /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

1

Zumindest mit Xcode 6 hast du das schon git-completion.bash. Es befindet sich im Xcode-App-Bundle.

Fügen Sie dies einfach zu Ihrer .bashrc hinzu:

source `xcode-select -p`/usr/share/git-core/git-completion.bash

Dies war die einzige Antwort, die tatsächlich für mich funktioniert hat. Andere Antworten führten zu seltsamen Fehlern, wenn Sie einen unvollständigen Befehl wiegit br<TAB>
r00m

0

Neben dem Beitrag von Adam K. Johnson

Sie können auch Folgendes setzen ...

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

... in Ihrer / etc / profile, wenn Sie wollen.

Auf diese Weise profitieren alle Benutzer des Systems von den Skripten zur Bash-Vervollständigung, die im Verzeichnis "/opt/local/etc/bash_completion.d/" installiert sind.


0

Während die obige Antwort von grundprinzip aus dem Jahr 2011 noch gut funktioniert, wollte ich jetzt eine neuere Antwort hinzufügen, da es jetzt ein Homebrew-Paket mit Bash-Vervollständigung ( Formel , Repo ) gibt, das dies noch einfacher macht. (Dies beinhaltet die Vervollständigung für Git sowie andere gängige Tools.)

Heute wird macOS mit Bash 3 ausgeliefert, aber Sie können brew install bashBash 4 erhalten. Wenn Sie Bash 4 ausführen, installieren Sie den neueren 2.x-Zweig der Bash-Vervollständigung.

Bash 4

  1. Lauf:

    brew install bash-completion@2
  2. Hinzufügen zu ~/.bash_profile:

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

Bash 3

Wenn Sie mit Stock Bash 3.x auf MacOS bleiben möchten, befolgen Sie stattdessen diese Anweisungen.

  1. Lauf:

    brew install bash-completion
  2. Hinzufügen zu ~/.bash_profile:

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

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


-2

Ich denke, Sie haben möglicherweise vergessen, die Datei in Ihrem Login zu suchen .bashrc. Sie können Folgendes hinzufügen:

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

Mit .gefolgt von einem Leerzeichen wird die Datei im aktuellen Kontext ausgeführt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.