(Mac) -bash: __git_ps1: commande introuvable

222

J'essaie de changer mon invite de commande dans le terminal. Je reçois toujours l'erreur:

-bash: __git_ps1: command not found

Je l' ai essayé en tapant dans le terminal est la suivante : __git_ps1. Je l'ai aussi essayé dans le.bash_profile

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

Comme vous pourrez peut-être voir / dire, oui, j'ai l'auto-complétion installée et cela fonctionne très bien!

Je suis tombé sur cette question: "La variable env PS1 ne fonctionne pas sur mac " qui donne le code

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

Je l'ajoute donc à mon .bash_profileespoir que cela changera quelque chose. Eh bien, oui. Cela vient de changer la sortie d'erreur.

Voici .bash_profilel'ajout:

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

Et maintenant, voici la sortie d'erreur modifiée:

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

Remarque: J'ai également déplacé l'alias sous la source sans aucune différence. J'ai la version 1.7.12.1 de git

Cela devrait être un simple changement. Quelqu'un peut-il m'aider?

Modifier 13/10/12

Non, je ne veux certainement pas définir __git_ps1 moi-même, mais j'essayais simplement de voir s'il serait reconnu en le faisant. Oui, j'ai .git-completion.bashinstallé le fichier. Voici comment j'ai obtenu la complétion automatique sur ma machine.

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

A ls -larépertorie ensuite le .git-completion.bashfichier.

Edit 13/10/12 - Résolu par Mark Longair (ci-dessous)

Le code suivant a fonctionné pour moi pendant .bash_profileque d'autres ne l'ont pas ...

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
fi
Geoff
la source
My git-completion.bashdéfinit __git_ps1comme une fonction shell. Est-ce le vôtre? Comment savez-vous que l'achèvement fonctionne? Que se passe-t-il lorsque vous tapez git h<TAB>?
rob mayoff
Quand je tape ça, ça finit avec git help [espace]
Geoff
La réponse acceptée est bonne mais l'invite peut également être activée en appuyant sur git <tab>comme indiqué dans le commit référencé par Mark Longair.
Jack Frost
Ce n'est pas seulement une bonne question expliquée, mais aussi une ressource utile pour guider la solution. Un vote bien mérité.
Yannis Dran
La vérification -f a permis de corriger cette erreur lors de l'exécution de bash à l'intérieur de l'écran (1) sur OS X 10.8.5. Aucune idée pourquoi, puisque le fichier existait malgré tout, mais merci quand même!
Nick K9

Réponses:

324

Vous avez installé la version de git-completion.bashfrom master- dans l'historique de développement de git, c'est après un commit qui a séparé la __git_ps1fonction de la fonctionnalité d'achèvement en un nouveau fichier ( git-prompt.sh). L'engagement qui a introduit ce changement, qui explique la justification, est af31a456 .

Je suggérerais tout de même de vous procurer la version de git-completion.bash(ou git-prompt.sh) fournie avec votre installation de git.

Cependant, si pour une raison quelconque vous souhaitez toujours utiliser cette fonctionnalité en utilisant des scripts téléchargés séparément à partir de master, vous devez télécharger de la git-prompt.shmême manière:

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

... et ajoutez la ligne suivante à votre ~/.bash_profile:

source ~/.git-prompt.sh

Ensuite, votre PS1variable qui inclut __git_ps1 '%s'devrait fonctionner correctement.

Mark Longair
la source
Vous avez raison de ne pas vouloir définir __git_ps1 moi-même. J'essayais juste de voir s'il le reconnaîtrait et ce n'est pas le cas. J'ai .git-complétement.bash sur ma racine. Je mettrai à jour ma question ci-dessus pour inclure comment j'ai réussi la complétion automatique ...
Geoff
@ designer84: merci pour les informations supplémentaires - je pense qu'il est clair maintenant quel est le problème, et j'ai mis à jour ma réponse avec une explication.
Mark Longair
Pourquoi ça ne marche pas? if [-f /usr/local/git/contrib/completion/git-completion.bash]; puis source /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff
5
Sur OSX 10.9 avec git 1.8.5.3 installé via Homebrew, les deux git-prompt.shet git-completion.bashse trouvent dans `brew --prefix git`/etc/bash_completion.d/.
dokkaebi
1
Dans MacPorts, le chemin a changé lorsque le package a git-coreété remplacé par git, voir cette question
Ramon de la Fuente
60

Après la mise à niveau vers OSX 10.9 Mavericks, j'ai dû faire référence aux fichiers suivants pour obtenir la fin de la commande git shell et l'invite git pour fonctionner à nouveau.

De mon .bash_profile ou similaire:

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
la source
C'était aussi mon problème dans osv 10.9
jeremyjjbrown
Bien que la réponse acceptée de @marklongair soit une bonne description, j'ai trouvé cette question via une recherche Google d'un message d'erreur (après la mise à niveau vers OS 10.10) et cette réponse est la solution la plus simple à mon problème (changer simplement le chemin vers le nouvel emplacement) ).
RedBassett
Cela a fonctionné pour moi dans 10.10.5 Yosemite, mais j'ai changé l'emplacement de git-prompt en ~/.git_prompt.sh. Les autres solutions n'ont pas fonctionné.
Rein
J'ai ajouté vos lignes suggérées à .bash_profile , mais je reçois toujours l'erreur:bash: __docker_machine_ps1: command not found
IgorGanapolsky
43

Vous devriez

$ brew install bash bash-complétion git

Puis source "$ (brew --prefix) / etc / bash_completion" dans votre .bashrc.

Steven Shaw
la source
Excellente réponse, certainement la meilleure façon si git est installé avec brew. Mais je pense que vous devez vous procurer ceci: source $ (brew --prefix) /etc/bash_completion.d/git-prompt.sh
febLey
1
@febLey Oui, l'emplacement a changé. J'ai mis à jour la réponse. Merci.
Steven Shaw
Ça ne marche pas. J'obtiens des
IgorGanapolsky
14

La suite a fonctionné pour moi comme un charme:

Exécutez la commande suivante dans votre terminal:

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

Ouvrez / créez bash_profile:

$ vi ~/.bash_profile

Ajoutez ce qui suit au fichier:

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"

Enfin, sourcez-le en utilisant:

$ source ~/.bash_profile

Cela résoudra le problème de bash: __git_ps1: command not found.

Votre invite passera également à "os". Pour remplacer "os" par autre chose, modifiez la chaîne "os" dans la ligne d'exportation PS1.

Usman
la source
J'obtiens toujours une erreur sh -c "clear && / bin / bash" bash: __docker_machine_ps1: commande introuvable à chaque fois que j'entre dans Docker CLI.
IgorGanapolsky
8

Solution pour MacOS Sierra et git version 2.10.1 <2017-2-06>

Étape 1: installez Git

Vous pouvez ignorer cette étape si vous avez déjà installé le dernier git.

Téléchargez le package git depuis le navigateur https://git-scm.com/download/

Remarque: si vous installez avec l' curl [option] https://...option de téléchargement, vous devez vous assurer que votre système prend en charge SSL. Donc, pour les nouveaux arrivants, télécharger à partir du navigateur et installer directement à partir du programme d'installation de git est beaucoup plus facile.

Vérification de l'installation:
  • Indiquez où se trouve votre répertoire git sur: which git
  • Indiquez la version actuelle de votre git: git --versionla version actuelle devrait être 2.10.1.

Étape 2: Ajoutez votre profil Git à votre shell

  1. Ouvrez votre profil shell:
    • nano ~/.bash_profileou nano ~/.bashrcDépend de l'endroit où se trouve votre modification.
  2. Ajoutez le code suivant au fichier:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Remarque: l'emplacement d'installation de git est passé de opt / directory à usr / local / après la mise à niveau d'OSX vers El Capitain, et c'est pourquoi certaines des anciennes réponses ci-dessus ne fonctionnent plus dans MacOS Sierra.

  1. Ajoutez le code suivant à votre configuration PS1:

    • Option 1: ajoutez directement à votre PS1: export PS1='\w$(__git_ps1 "(%s)") > '

      Je préfère cette approche simple car je sais déjà .git-completion.bashqu'il y en a dans mon répertoire personnel et je peux ajouter un autre format d'invite à l'avant. voici mon invite personnelle pour votre référence:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Option 2: ajouter un script de sélection

    if [-f ~ / .git-complétement.bash]; puis
          export PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    Fi
  2. Enregistrez et utilisez le profil: source ~/.bash_profileousource ~/.bashrc

Vous devriez maintenant voir l'invite git fonctionner correctement et montrer dans quelle branche vous vous trouvez en ce moment.

la source
5

J'ai eu le même problème lors de la mise à niveau vers Yosemite.

Je devais modifier ~/.bashrcàsource /usr/local/etc/bash_completion.d/git-prompt.sh place de l'ancien chemin.

puis re-source votre . ~/.bashrcpour obtenir l'effet.

chovy
la source
5

Solution propre High Sierra avec des couleurs!

Aucun téléchargement. Pas d'infusion. Pas de Xcode

Ajoutez-le simplement à votre ~ / .bashrc ou ~ / .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
la source
4

__git_ps1 pour bash se trouve maintenant dans git-prompt.sh dans /usr/local/etc/bash_completion.d sur ma version git installée 1.8.1.5 de brew

traday
la source
2

cela fonctionne sous OS 10.8 dans le .bash_profile

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='YOURNAME[\W]$(__git_ps1 "(%s)"): '
fi
plus lent
la source
Ne résout
IgorGanapolsky
2

Pour macports, j'ai dû ajouter: source /opt/local/share/git-core/git-prompt.shà mon ./profile

velop
la source
1
@IgorGanapolsky Je suppose que vous n'avez pas installé de macports ? Faites-le simplement touch ~/.profile. Mais vous avez besoin de toute évidence un fichier: /opt/local/share/git-core/git-prompt.sh
velopper
2

Si vous espérez utiliser Homebrew pour mettre à niveau Git et que vous avez laissé votre système devenir obsolète en général (comme je l'ai fait), vous devrez peut-être mettre Homebrew lui-même à jour en premier (selon la mise à jour de brassage) : Les fichiers d'arbre de travail non suivis suivants seraient écrasés par la fusion: merci @ chris-frisina)

D'abord mettre Homebrew en conformité avec la version actuelle

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

Mettez ensuite à jour Git:

mettre à niveau git

Problème résolu! ;-)

Jour Davis Waterbury
la source
2

Au moins avec Xcode 6, vous avez déjà git-completion.bash . C'est à l'intérieur du bundle d'application Xcode.

Ajoutez simplement ceci à votre .bashrc:

source `xcode-select -p`/usr/share/git-core/git-completion.bash
jrc
la source
2
  1. Téléchargez les fichiers git-prompt.sh et git-complétement.bash depuis cette complétion Git
  2. Renommez les fichiers.
  3. Déplacez ces fichiers vers votre répertoire personnel.
  4. Ajoutez le fichier source dans le .bash_profile

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

Je sais que ce n'est pas une vraie réponse ...

J'ai eu des problèmes étranges avec le sourcing git-prompt.sh dans mon .bashrc alors j'ai commencé à chercher une autre solution. Celui-ci: http://www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-prompt/ n'utilise pas __git_ps1 et l'auteur affirme que cela fonctionne aussi sur Mac (pour l'instant cela fonctionne parfaitement sur mon Ubuntu et c'est facile à modifier).

J'espère que ça aide!

op1ekun
la source
1

Je suivais le cours sur Udacity pour git hub et rencontrais ce même problème. Voici mon code final qui fonctionne correctement.

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

Ça marche! https://i.stack.imgur.com/d0lvb.jpg

super-héros
la source
0

Celui-ci a fonctionné pour moi, et il a une sortie git colorée et un indicateur dans l'invite indiquant si les fichiers ont été modifiés / ajoutés, cuits à droite dedans:

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

Assurez-vous d'utiliser le bon chemin! J'ai utilisé homebrew pour installer git, utilisez brew list gitpour obtenir le chemin de votre installation actuelle.

Ce serait bien de ne pas utiliser un chemin codé en dur, mais je ne sais pas comment obtenir le chemin vers l'installation actuelle.

Plus d'infos ici: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/

Joshua Muheim
la source
0

Pour git, il y en a /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. Et regardez /etc/bashrc_Apple_Terminalaussi.

Donc, je les mets dans ~/.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
la source
Toujours cette erreur:bash: __docker_machine_ps1: command not found
IgorGanapolsky
0

Avant-propos: désolé de ne pas avoir commenté la réponse de haysclark et d'en avoir fait une nouvelle, tout simplement pas assez de représentants.

Veuillez noter que si vous n'avez pas installé git via Xcode ou home-brew, vous trouverez probablement les scripts bash auxquels haysclarks fait référence dans /Library/Developer/CommandLineTools/, et non dans /Applications/Xcode.app/Contents/Developer/, ce qui rend les lignes à inclure dans .bashrc ce qui suit:

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

Vous aurez besoin de ces lignes si vous souhaitez également utiliser git-prompt.

Simone Chiesi
la source