Comment faire en sorte que git-completion.bash fonctionne sur Mac OS X?


92

J'ai suivi http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-sans sans ajouter git-completion.bashà mon/opt/local/etc/bash_completion.d/git-completion

et je mets PS1='\h:\W$(__git_ps1 "(%s)") \u\$ 'dans mon .bashrc_profile

Mais maintenant, je reçois -bash: __git_ps1: command not foundtout ce que je fais a cd.

Pouvez-vous s'il vous plaît me dire ce qui me manque?


Réponses:


64

J'ai installé git sous MacPorts sur ma nouvelle installation de Snow Leopard. Une fois MacPorts installé à partir de l'image .dmg, voici les commandes de Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Si vous souhaitez également une assistance pour extraire des référentiels et des documents SVN, utilisez ceci au lieu de la deuxième ligne:

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

Ajoutez ensuite les éléments suivants à votre ~ / .profile ou ~ / .bash_profile:

Fin de la commande shell # MacPorts Bash
if [-f / opt / local / etc / bash_completion]; ensuite
    . / opt / local / etc / bash_completion
Fi

ou pour MacPorts depuis la version 2.1.2 sur Mountain Lion:

Fin de la commande shell # MacPorts Bash
if [-f /opt/local/etc/profile.d/bash_completion.sh]; ensuite
  . /opt/local/etc/profile.d/bash_completion.sh
Fi

ou pour MacPorts avec les nouvelles versions de git:

if [-f /opt/local/share/git-core/git-prompt.sh]; ensuite
    . /opt/local/share/git-core/git-prompt.sh
Fi

Remarque: bash 4.1 ou supérieur est requis par bash_completion.sh. Si l'achèvement ne fonctionne pas, essayez echo $BASH_VERSIONde voir si c'est le problème. Si tel est le cas, entrez MacPorts bash en le saisissant bashet essayez à nouveau de l'achèvement git.


Je viens de copier-coller et j'obtiens toujours l'erreur du PO. = \. Comment dites-vous ce qui a été inclus? Je ne puis pas bask_completion est une source
NullVoxPopuli

Notez que dans les versions plus récentes de git / macport / bash-complétion, l'invite se trouve dans un fichier différent. Voir: 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
Étant donné que j'ai /opt/local/etc/profile.d/bash_completion.shbesoin de la version $BASH_VERSION4.1 ou supérieure, je devais effectuer les opérations suivantes sur Mac OS X 10.8.3 avec MacPorts 2.1.3: Basculer le shell de connexion Mac OS X de sa /bin/bashconfiguration par défaut (version 3.2.48 (1)) vers MacPorts /opt/local/bin/bash(version 4.2). .42 (2) -release) comme décrit ici: stackoverflow.com/a/791244/287984. Fondamentalementif [ `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

A bien fonctionné pour moi. Devait remplacer /bin/bashdans Terminal.app par /opt/local/bin/bashmacports + tous les .bash_profilechangements suggérés ici.
bgs

1
Pour passer à la version 4.1 ou ultérieure, vous pouvez suivre les instructions suivantes: apple.stackexchange.com/questions/70132/…
ThomasW

55

Si vous avez installé git à l' aide homebrew que vous pouvez ajuster les conseils MacPorts un peu et ajouter à votre .bash_profileet.bashrc

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

La meilleure façon de vérifier si vous avez correctement installé git en utilisant homebrew ist pour exécuter

brew info git

et vérifiez la sortie du répertoire d'installation de l'achèvement de git bash

La dernière version de Git (1.7.12) requiert également les éléments suivants pour activer l’invite.

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

Pour en savoir plus __git_ps1, voir superuser.com/a/477749/90231 réponse dans cette pile.
RichVel

26

Tout ce que vous avez à faire est de placer le git-completion.bashfichier dans votre binrépertoire de base de l'utilisateur et de placer les éléments suivants dans votre fichier .profileou dans votre .bash_profilefichier:

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

Cela permet de s’assurer que votre bin local est dans PATH et que la sourcecommande permet de faire avancer les choses. Ensuite, bien sûr, la modification PS1 place la branche actuellement extraite dans l’invite.

Donc, aucune installation de MacPort pour installer ensuite la version "complète" de GIT (particulièrement irritante si vous l'avez déjà installée).



1
Pour ceux qui se demandent comment combiner cette chose PS1 avec des couleurs dans votre invite, voir: stackoverflow.com/questions/816790/…
Nickolay

1
Plus précisément, git-completion.bash doit juste être quelque part dans votre $PATH. J'ai décidé de mettre le mien /usr/local/bin/pour ne pas avoir à modifier mon existant $PATH.
Metavida

13

Bien que la réponse actuelle soit correcte pour les anciens MacPorts, un nouveau problème concernant les MacPorts les plus récents entraîne la même erreur.

Le package bash-completion actuel (2.0 r1) nécessite au moins un bash 4.1 pour fonctionner correctement. Comme un terminal OS X habituel utilise /bin/bashseulement un 3.x. Vous devez modifier les paramètres du terminal à utiliser /opt/local/bin/bash -lcomme décrit dans la documentation MacPorts à l' adresse suivante : http://trac.macports.org/wiki/howto/bash-completion


C’est la réponse la plus correcte car j’ai eu le problème seulement après la mise à jour de macports. Le seul inconvénient de l'utilisation de macports bash depuis un terminal est qu'il m'avertit maintenant de mettre fin aux processus en cours lorsque j'essaie de fermer la fenêtre de mon terminal. Avez-vous déjà rencontré ce problème?
vitch


5

Ennuis, cela a encore été cassé. Cette fois, ce sont les gens géniaux avec la version 1.7.12-1. Pour permettre aux utilisateurs de ne disposer que de la fonctionnalité d'invite sans la fonctionnalité d'achèvement (ce qui peut ralentir le processus), ils ont refactoré la fonctionnalité d'invite à partir de bash_completion / git et dans son propre fichier git-prompt.sh.

Ainsi, l'ajout de bash_completion comme décrit par @Lara ne vous permettra d'obtenir que l'achèvement (cliquer sur l'onglet complète les noms de balises / branches).

Pour __git_ps1que vous puissiez l’utiliser dans votre invite PS1, vous devez également ajouter ce qui suit à votre ~ / .profile.

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

Un peu d’arrière-plan est disponible ici: https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632



3

Ou avec Homebrew

brew install bash-completion git-extras

2
Merci beaucoup. Cela devrait être le cas brew install bash-completion git-extras(tiret au lieu de soulignement).
simonair


2

Pour Mountain Lion et Mac-Ports, je devais utiliser les lignes suivantes de mon fichier .bash_profile pour que __git_ps1 et les compléments fonctionnent normalement:

# 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

J'utilise brasser, donc un bash_completionscript maître qui exécute tous ceux-ci bash_completion.dsemble ne pas être fourni. Les solutions qui proposent simplement d'exécuter un seul script pour ajouter des finitions git ne sont pas extensibles, car différents packages ajouteront des scripts d'achèvement différents et vous voudrez probablement les exécuter tous. J'ai donc ajouté ceci (adapté de Arch Linux) à la fin de /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

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

Ajoutez simplement ceci à votre .bashrc:

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

C'était la seule réponse qui a fonctionné réellement pour moi. D'autres réponses produisaient des erreurs étranges lorsque vous tapez une commande incomplète du typegit br<TAB>
r00m

0

En plus du poste d'Adam K. Johnson

Vous pouvez aussi mettre ce qui suit ...

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

... dans votre / etc / profile, si vous voulez.

Ainsi, tous les utilisateurs du système bénéficieront des scripts d'achèvement de bash installés dans le répertoire "/opt/local/etc/bash_completion.d/".


0

Bien que la réponse ci-dessus de grundprinzip à partir de 2011 fonctionne toujours bien, je voulais ajouter une réponse plus récente maintenant qu’il existe maintenant un paquet Homebrew bash-completion ( formule , repo ) qui facilite encore plus cette opération. (Cela inclut l'achèvement de git ainsi que d'autres outils courants.)

Aujourd'hui, macOS est livré avec Bash 3, mais vous pouvez brew install bashobtenir Bash 4. Si vous utilisez Bash 4, installez la nouvelle branche 2.x de bash-complétion.

Bash 4

  1. Courir:

    brew install bash-completion@2
  2. Ajouter à ~/.bash_profile:

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

Bash 3

Si vous souhaitez vous en tenir à stock bash 3.x sous macOS, suivez plutôt ces instructions.

  1. Courir:

    brew install bash-completion
  2. Ajouter à ~/.bash_profile:

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

Référence: http://davidalger.com/development/bash-completion-on-os-x-with-brew/


-2

Je pense que vous avez peut-être oublié de rechercher le fichier dans votre login .bashrc, vous pouvez ajouter quelque chose comme:

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

L'utilisation .suivie d'un espace exécute le fichier dans le contexte actuel.

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.