Come far funzionare git-completamento.bash su Mac OS X?


92

Ho seguito http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live- senza aggiungere git-completion.bashal mio/opt/local/etc/bash_completion.d/git-completion

e ho inserito il PS1='\h:\W$(__git_ps1 "(%s)") \u\$ 'mio .bashrc_profile

Ma ora sto ricevendo -bash: __git_ps1: command not foundtutto ciò che faccio a cd.

Puoi per favore dirmi cosa mi sto perdendo?


Risposte:


64

Ho installato git usando MacPorts sulla mia nuova installazione di Snow Leopard. Dopo l'installazione di MacPorts dall'immagine .dmg, questi sarebbero i comandi in Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Se vuoi anche il supporto per estrarre da repository e documenti SVN, usa questo invece della seconda riga:

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

Quindi aggiungi quanto segue al tuo ~ / .profile o ~ / .bash_profile:

# MacPorts Completamento comando shell Bash
if [-f / opt / local / etc / bash_completion]; poi
    . / Opt / local / etc / bash_completion
fi

o per MacPorts dalla versione 2.1.2 su Mountain Lion:

# MacPorts Completamento comando shell Bash
if [-f /opt/local/etc/profile.d/bash_completion.sh]; poi
  . /opt/local/etc/profile.d/bash_completion.sh
fi

o per MacPorts con le versioni più recenti di git:

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

Nota: bash 4.1 o successivo è richiesto da bash_completion.sh. Se il completamento non funziona, prova echo $BASH_VERSIONa vedere se questo è il problema. In tal caso, immettere MacPorts bash digitando bashe riprovare a completare git.


Ho appena copiato e incollato e ricevo ancora l'errore dell'OP. = \. Come si dice cosa è stato incluso? Quindi non bask_completion è di provenienza
NullVoxPopuli

nota con le versioni più recenti di git / macport / bash-completamento il prompt si trova in un file diverso. Vedi: 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 il

3
Poiché /opt/local/etc/profile.d/bash_completion.shnecessita di una versione $BASH_VERSION4.1 o superiore, ho dovuto eseguire le seguenti operazioni su un Mac OS X 10.8.3 con MacPorts 2.1.3: /bin/bashpassare la shell di accesso di Mac OS X dalla sua versione predefinita (3.2.48 (1)) a MacPorts /opt/local/bin/bash(4.2 .42 (2) -release) come è descritto qui: stackoverflow.com/a/791244/287984. Fondamentalmenteif [ `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 il

Ha funzionato alla grande per me. Ho dovuto sostituire /bin/bashTerminal.app con /opt/local/bin/bashda macports + tutte le .bash_profilemodifiche suggerite qui.
bg

1
Per passare alla versione 4.1 o successiva puoi seguire le istruzioni qui: apple.stackexchange.com/questions/70132/…
ThomasW

55

Se hai installato git usando homebrew di quanto potresti modificare leggermente i consigli di MacPorts e aggiungere questo al tuo .bash_profilee.bashrc

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

Il modo migliore per verificare se git è stato installato correttamente usando homebrew per eseguire

brew info git

e controlla l'output per la directory di installazione del completamento git bash

L'ultima versione di Git (1.7.12) richiede anche quanto segue per abilitare il prompt.

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

Per ulteriori informazioni __git_ps1, vedere superuser.com/a/477749/90231 risposta in questo stack.
RichVel,

26

Tutto quello che devi fare è posizionare il git-completion.bashfile nella bindirectory home dell'utente e inserire quanto segue in te .profileo nel .bash_profilefile:

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

Quello che fa è assicurarsi che il cestino locale sia nel PERCORSO e che il sourcecomando faccia funzionare tutto. Quindi, ovviamente, la modifica di PS1 inserisce nel prompt il ramo attualmente estratto.

Quindi, nessun MacPort installa per installare una versione di "completamento" di GIT (particolarmente irritante se lo hai già installato).



1
Per coloro che si chiedono come combinare quella cosa PS1 con i colori nel tuo prompt vedi: stackoverflow.com/questions/816790/…
Nickolay

1
Più precisamente, git-completamento.bash deve solo essere da qualche parte nel tuo $PATH. Ho deciso di inserire il mio in /usr/local/bin/modo da non dover modificare il mio esistente $PATH.
Metavida,

13

Mentre la risposta corrente è corretta per i MacPort meno recenti, c'è un nuovo problema con i MacPort più recenti con lo stesso errore.

L'attuale pacchetto di completamento bash (2.0 r1) richiede almeno un bash 4.1 per funzionare correttamente. Come al solito usa il Terminale OS X /bin/bash, ottiene solo un 3.x. Devi modificare le impostazioni del tuo terminale per usarle /opt/local/bin/bash -lcome descritto nella documentazione di MacPorts qui: http://trac.macports.org/wiki/howto/bash-completion


Questa è la risposta più corretta in quanto ho iniziato ad avere il problema solo dopo l'aggiornamento di Macport. L'unico aspetto negativo dell'utilizzo del bash di macports dal terminale è che ora mi avverte di terminare i processi in esecuzione quando provo a chiudere la finestra del mio terminale - ti sei imbattuto in questo?
vitch


5

Questo fastidiosamente è stato rotto ancora una volta. Questa volta è la gente git con la versione 1.7.12-1. Per consentire alle persone di avere solo la funzionalità di prompt senza la funzionalità di completamento (che può rallentare le cose), hanno refactored la funzionalità di prompt da bash_completion / git e nel suo file git-prompt.sh.

Quindi l'aggiunta di bash_completion come descritto da @Lara ti darà solo il completamento (la scheda colpire completa i nomi di tag / ramo).

Per ottenere __git_ps1ciò in modo da poterlo utilizzare nel tuo prompt di PS1, devi anche aggiungere quanto segue al tuo ~ / .profile.

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

Alcuni retroscena sono qui - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632



3

O con Homebrew

brew install bash-completion git-extras

2
Molte grazie. Dovrebbe essere brew install bash-completion git-extrascomunque (trattino invece di trattino basso).
simonair


2

Per Mountain Lion e Mac-Ports ho dovuto usare le seguenti righe nel mio .bash_profile per far funzionare normalmente __git_ps1 e i completamenti:

# 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

Uso brew, quindi uno bash_completionscript master che esegue tutti quelli in bash_completion.dsembra non essere fornito. Le soluzioni che propongono solo l'esecuzione di un singolo script per aggiungere completamenti git non sono estensibili, poiché pacchetti diversi aggiungeranno script di completamento diversi e probabilmente vorrai eseguirli tutti. Pertanto ho aggiunto questo (adattato da Arch Linux) alla fine di /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

Almeno con Xcode 6, lo hai già git-completion.bash. È all'interno del bundle dell'app Xcode.

Basta aggiungere questo al tuo .bashrc:

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

Questa è stata l'unica risposta che ha funzionato per me. Altre risposte producevano strani errori quando si digita un comando incompleto comegit br<TAB>
r00m

0

Oltre al post di Adam K. Johnson

Puoi anche mettere il seguente ...

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

... nel tuo profilo / etc /, se vuoi.

In questo modo tutti gli utenti del sistema trarranno vantaggio da qualsiasi script di completamento bash installato nella directory "/opt/local/etc/bash_completion.d/".


0

Mentre la risposta sopra di grundprinzip del 2011 funziona ancora bene, volevo aggiungere una risposta più recente ora che ora c'è un pacchetto Homebrew bash-completamento ( formula , repository ) che lo rende ancora più semplice. (Ciò include il completamento di git e altri strumenti comuni.)

Oggi macOS viene fornito con Bash 3, ma è possibile brew install bashottenere Bash 4. Se si esegue Bash 4, installare il ramo 2.x più recente di bash-completamento.

Bash 4

  1. Correre:

    brew install bash-completion@2
  2. Aggiungi a ~/.bash_profile:

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

Bash 3

Se vuoi attaccare con bash 3.x su macOS, segui invece queste indicazioni.

  1. Correre:

    brew install bash-completion
  2. Aggiungi a ~/.bash_profile:

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

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


-2

Penso che forse ti dimentichi di procurarti il ​​file nel tuo login .bashrc, puoi aggiungere qualcosa come:

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

L'uso .seguito da uno spazio esegue il file nel contesto corrente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.