(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

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.


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

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.


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.


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.

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.


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

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


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

Ne résout
IgorGanapolsky

2

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


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! ;-)


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

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.
    


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


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/


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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.