(Mac) -bash: __git_ps1: comando non trovato


222

Sto cercando di cambiare il mio prompt dei comandi nel terminale. Continuo a ricevere l'errore:

-bash: __git_ps1: command not found

Lo ho provato semplicemente digitando nel terminale come è: __git_ps1. L'ho anche provato nel.bash_profile

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

Come potresti vedere / dire, sì, ho il completamento automatico installato e funziona alla grande!

Mi sono imbattuto in questa domanda: "La variabile env PS1 non funziona su Mac " che fornisce il codice

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

Quindi lo aggiungo alla mia .bash_profilesperanza che cambierà qualcosa. Bene, lo ha fatto. Ha appena cambiato l'output dell'errore.

Ecco il .bash_profilecon l'aggiunta:

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

E ora ecco l'output dell'errore modificato:

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

Nota: ho anche spostato l'alias sotto la fonte senza alcuna differenza. Ho la versione git 1.7.12.1

Questo dovrebbe essere un semplice cambiamento. Qualcuno può aiutarmi?

Modifica 13/10/12

No, sicuramente non voglio definire __git_ps1 da solo, ma stavo solo cercando di vedere se sarebbe stato riconosciuto così. Sì, ho il .git-completion.bashfile installato. Ecco come ho ottenuto il completamento automatico sulla mia macchina.

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

A ls -laquindi elenca il .git-completion.bashfile.

Modifica 13/10/12 - Risolto da Mark Longair (sotto)

Il seguente codice ha funzionato per me .bash_profilementre gli altri non ...

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

My git-completion.bashdefinisce __git_ps1una funzione shell. Il tuo? Come sai che il completamento sta funzionando? Cosa succede quando si digita git h<TAB>?
Rob Mayoff,

Quando lo scrivo, finisce con git help [spazio]
Geoff,

La risposta accettata è buona ma il prompt può essere abilitato anche colpendo git <tab>come indicato nel commit a cui fa riferimento Mark Longair.
Jack Frost

Questa non è solo una buona domanda esplicita, ma anche una risorsa utile che guida alla soluzione. Un meritato voto.
Yannis Dran,

Il controllo -f ha funzionato per correggere questo errore quando si esegue bash all'interno dello schermo (1) su OS X 10.8.5. Non ho idea del perché, dato che il file esisteva a prescindere, ma grazie comunque!
Nick K9,

Risposte:


324

Hai installato la versione di git-completion.bashfrom master- nella storia dello sviluppo di git, dopo un commit che ha diviso la __git_ps1funzione dalla funzionalità di completamento in un nuovo file ( git-prompt.sh). Il commit che ha introdotto questo cambiamento, che spiega la logica, è af31a456 .

Vorrei ancora suggerire che hai appena fonte la versione di git-completion.bash(ogit-prompt.sh ) in bundle con l'installazione di git.

Tuttavia, se per qualche motivo desideri comunque utilizzare questa funzionalità utilizzando gli script scaricati separatamente da master, devi scaricare in git-prompt.shmodo simile:

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

... e aggiungi la seguente riga al tuo ~/.bash_profile:

source ~/.git-prompt.sh

Quindi la tua PS1variabile che include__git_ps1 '%s' dovrebbe funzionare bene.


Hai ragione che non voglio definire __git_ps1 da solo. Stavo solo cercando di vedere se lo avrebbe riconosciuto e non lo fa. Ho .git-completamento.bash sulla mia radice. Aggiornerò la mia domanda sopra per includere come ho fatto funzionare il completamento automatico ...
Geoff

@ designer84: grazie per le informazioni extra. Penso che sia chiaro ora quale sia il problema e ho aggiornato la mia risposta con una spiegazione.
Mark Longair,

Perché questo non funziona? if [-f /usr/local/git/contrib/completion/git-completion.bash]; quindi fonte /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff,

5
Su OSX 10.9 con git 1.8.5.3 installato tramite Homebrew, entrambi git-prompt.she git-completion.bashsi trovano in `brew --prefix git`/etc/bash_completion.d/.
dokkaebi,

1
In MacPorts, il percorso è cambiato quando il pacchetto è git-corestato sostituito git, vedi questa domanda
Ramon de la Fuente

60

Dopo l'aggiornamento a OSX 10.9 Mavericks ho dovuto fare riferimento ai seguenti file per ottenere il completamento del comando git shell e git prompt per funzionare di nuovo.

Dal mio .bash_profile o simile:

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)")\$ '

Questo era anche il mio problema in osv 10.9
jeremyjjbrown

Mentre la risposta accettata da @marklongair è una buona descrizione, ho trovato questa domanda tramite una ricerca su Google di un messaggio di errore (dopo l'aggiornamento a OS 10.10) e questa risposta è la soluzione più semplice per il mio problema (semplicemente cambiando il percorso nella nuova posizione ).
RedBassett,

Questo ha funzionato per me in Yosemite 10.10.5, tuttavia ho cambiato la posizione di git-prompt in ~/.git_prompt.sh. Le altre soluzioni non hanno funzionato.
Rein

Ho aggiunto le tue righe suggerite a .bash_profile , ma sto ancora ricevendo l'errore:bash: __docker_machine_ps1: command not found
IgorGanapolsky il

43

Dovresti

$ brew installa bash bash completamento git

Quindi fonte "$ (brew --prefix) / etc / bash_completion" nel tuo .bashrc.


Ottima risposta, sicuramente il modo migliore se git è installato con brew. Ma penso che tu debba procurarti questo: source $ (brew --prefix) /etc/bash_completion.d/git-prompt.sh
febLey

1
@febLey Sì, la posizione è cambiata. Ho aggiornato la risposta. Grazie.
Steven Shaw,

Questo non funziona Ottengo errori: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: autorizzazione negata bash: __docker_machine_ps1: comando non trovato
IgorGanapolsky

14

Seguire ha funzionato per me come un incantesimo:

Esegui quanto segue nel tuo Terminale:

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

Apri / Crea bash_profile:

$ vi ~/.bash_profile

Aggiungi seguente al file:

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"

Infine, procuralo usando:

$ source ~/.bash_profile

Questo risolverà il problema di bash: __git_ps1: command not found.

Inoltre, il tuo prompt cambierà in "os". Per cambiare "os" in qualcos'altro, modifica la stringa "os" nella riga di esportazione PS1.


Ricevo ancora un errore sh -c "cancella && / bin / bash" bash: __docker_machine_ps1: comando non trovato ogni volta che accedo alla CLI Docker.
IgorGanapolsky,

8

Soluzione per MacOS Sierra e git versione 2.10.1 <2017-2-06>

Passaggio 1: installare Git

Puoi saltare questo passaggio se hai già installato l'ultimo git.

Scarica il pacchetto git dal browser https://git-scm.com/download/

Nota: se si installa con curl [option] https://... opzione per il download, è necessario assicurarsi che il sistema supporti SSL. Quindi, per i nuovi arrivati, scaricare dal browser e installarli direttamente dal programma di installazione di Git è molto più semplice.

Verifica dell'installazione:
  • Mostra dove si trova la tua directory git su: which git
  • Mostra quale versione è attualmente Git: git --versionla versione corrente dovrebbe essere 2.10.1.

Passaggio 2: aggiungi il tuo profilo git alla shell

  1. Apri il tuo profilo shell:
    • nano ~/.bash_profileo nano ~/.bashrcDipende da dove si trova la modifica.
  2. Aggiungi il seguente codice al file:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Nota: il percorso di installazione di git è cambiato da opt / directory a usr / local / dopo l'aggiornamento di OSX a El Capitain, ed è per questo che alcune delle vecchie risposte sopra non funzionano più in MacOS Sierra.

  1. Aggiungi il seguente codice alla tua configurazione PS1:

    • Opzione 1: aggiungi direttamente alla tua PS1: export PS1='\w$(__git_ps1 "(%s)") > '

      Preferisco questo approccio semplice poiché so già che .git-completion.bashc'è nella mia home directory e posso aggiungere un altro formato di prompt nella parte frontale di esso. ecco la mia richiesta personale per il vostro riferimento:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Opzione 2: aggiungere uno script di selezione

    if [-f ~ / .git-completamento.bash]; poi
          export PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    fi
  2. Salvare e utilizzare il profilo: source ~/.bash_profileosource ~/.bashrc

Ora dovresti vedere il prompt di git che funziona correttamente e mostra in quale ramo sei in questo momento.

5

Ho avuto lo stesso problema durante l'aggiornamento a Yosemite.

Ho dovuto solo modificare ~/.bashrcal source /usr/local/etc/bash_completion.d/git-prompt.shposto del vecchio percorso.

quindi ri-fonte . ~/.bashrcper ottenere l'effetto.


5

Soluzione pulita High Sierra con colori!

Nessun download. Nessuna birra. Nessun Xcode

Aggiungilo al tuo ~ / .bashrc o ~ / .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" "\\\$ "'

4

__git_ps1 per bash ora si trova in git-prompt.sh in /usr/local/etc/bash_completion.d sul mio brew installato git versione 1.8.1.5


2

funziona con OS 10.8 nel .bash_profile

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

Non risolve l'errore: bash: __docker_machine_ps1: comando non trovato
IgorGanapolsky

2

Per i macport ho dovuto aggiungere: source /opt/local/share/git-core/git-prompt.shal mio ./profile


1
@IgorGanapolsky Immagino che non hai installato macports ? Semplicemente touch ~/.profile. Ma ovviamente hai bisogno di un file in: /opt/local/share/git-core/git-prompt.sh
velop

2

Se speri di usare Homebrew per aggiornare Git e hai lasciato che il tuo sistema non fosse aggiornato in generale (come ho fatto io), potrebbe essere necessario aggiornare Homebrew stesso per primo (come da aggiornamento brew : I seguenti file dell'albero di lavoro non tracciati verrebbero sovrascritti dall'unione: thanks @ chris-frisina)

Innanzitutto, allineare Homebrew alla versione corrente

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

Quindi aggiorna Git:

brew upgrade git

Problema risolto! ;-)


2

Almeno con Xcode 6, 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

2
  1. Scarica i file git-prompt.sh e git-completamento.bash da questo completamento di Git
  2. Rinomina i file.
  3. Sposta quei file nella tua home directory.
  4. Aggiungi il file sorgente al file .bash_profile

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


1

Stavo facendo il corso su Udacity per git hub e stavo avendo lo stesso problema. Ecco il mio codice finale che fa funzionare correttamente.

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

Funziona! https://i.stack.imgur.com/d0lvb.jpg


0

Questo ha funzionato per me e ha colorato l'output git e un indicatore nel prompt se i file sono stati modificati / aggiunti, direttamente inseriti in esso:

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

Assicurati di utilizzare il percorso corretto! Ho usato homebrew per installare git, usare brew list gitper ottenere il percorso per l'installazione corrente.

Sarebbe bello non usare un percorso hard coded, ma non so come ottenere il percorso per l'installazione corrente.

Maggiori informazioni qui: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/


0

Per git, ci sono /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. E per favore guarda /etc/bashrc_Apple_Terminalanche tu.

Quindi, ho inserito questi ~/.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

Ancora visualizzato questo errore:bash: __docker_machine_ps1: command not found
IgorGanapolsky il

0

Premessa: scusate per non aver commentato la risposta di haysclark e averne fatta una nuova, semplicemente non abbastanza rappresentante.

Per favore non che, se non hai installato git tramite Xcode o home-brew, probabilmente troverai gli script bash a cui si riferiscono gli haysclarks in /Library/Developer/CommandLineTools/, e non in /Applications/Xcode.app/Contents/Developer/, facendo così le righe da includere in .bashrc:

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

Avrai bisogno di quelle righe se vuoi usare anche git-prompt.

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.