95 votes

Comment faire fonctionner git-completion.bash sous Mac OS X ?

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

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

Mais maintenant j'obtiens ceci -bash: __git_ps1: command not found tout ce que je fais un cd .

Pouvez-vous me dire ce que j'ai manqué ?

0 votes

64voto

bosnic Points 534

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

sudo port selfupdate
sudo port install git-core +bash_completion

Si vous souhaitez également prendre en charge l'extraction des dépôts et de la documentation SVN, utilisez cette ligne à la place de la deuxième :

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

Ajoutez ensuite ce qui suit à votre ~/.profile ou ~/.bash_profile :

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

ou pour MacPorts depuis la version 2.1.2 sur Mountain Lion :

\# MacPorts Bash shell command completion
if \[ -f /opt/local/etc/profile.d/bash\_completion.sh \]; then
  . /opt/local/etc/profile.d/bash\_completion.sh
fi

ou pour MacPorts avec des versions plus récentes de git :

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

Note : bash 4.1 ou supérieur est requis par bash_completion.sh. Si la complétion ne fonctionne pas, essayez echo $BASH_VERSION pour voir si c'est le problème. Si c'est le cas, entrez dans MacPorts bash en tapant bash et essayez à nouveau de compléter git.

0 votes

Je viens de faire un copier-coller, et j'ai toujours l'erreur du PO. = \. Comment savoir ce qui a été inclus ? Je ne pense pas que bash_completion ait été sourcé.

0 votes

Notez qu'avec les versions plus récentes de git/macport/bash-completion, l'invite est 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

3 votes

Parce que /opt/local/etc/profile.d/bash_completion.sh besoins $BASH_VERSION 4.1 ou mieux, j'ai dû faire ce qui suit sur un Mac OS X 10.8.3 avec MacPorts 2.1.3 : faire passer le login Mac OS X Shell de son état par défaut à celui de l'utilisateur. /bin/bash (3.2.48(1)-release) à MacPorts /opt/local/bin/bash (4.2.42(2)-release) comme il est décrit ici : stackoverflow.com/a/791244/287984. En gros, if [ `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

58voto

grundprinzip Points 671

Si vous avez installé git en utilisant homebrew, vous pouvez ajuster un peu le conseil de MacPorts et ajouter ceci à votre fichier .bash_profile y .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 est d'exécuter

brew info git

et vérifiez la sortie pour le 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

0 votes

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

0 votes

Wow, je ne savais même pas que cela venait avec git lorsqu'il était installé avec homebrew. Ils devraient automatiquement ajouter ceci à ~/.bash_profile Je me demande qui ne voudrait pas de ça.

26voto

iansheridan Points 361

Tout ce que vous devez faire est de placer le git-completion.bash dans le dossier de l'utilisateur bin et placez les éléments suivants dans votre .profile o .bash_profile fichier :

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

Cela permet de s'assurer que votre binaire local se trouve dans le PATH et que la commande source Le commandement fait avancer les choses. Ensuite, bien sûr, le changement PS1 met la branche actuellement extraite dans l'invite.

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

2 votes

2 votes

Pour ceux qui se demandent comment combiner ce truc de PS1 avec des couleurs dans votre message, voyez : stackoverflow.com/questions/816790/

1 votes

Plus précisément, git-completion.bash doit simplement se trouver quelque part dans votre fichier $PATH . J'ai décidé de mettre le mien dans /usr/local/bin/ afin que je n'aie pas à modifier mon système existant. $PATH .

13voto

Madhu Points 1719

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

L'actuel complétion bash (2.0 r1) nécessite au moins un bash 4.1 pour fonctionner correctement. Comme d'habitude, le terminal OS X utilise /bin/bash il n'obtient qu'un 3.x. Vous devez changer les paramètres de votre terminal pour utiliser /opt/local/bin/bash -l comme décrit dans la documentation MacPorts ici : http://trac.macports.org/wiki/howto/bash-completion

0 votes

C'est la réponse la plus correcte car je n'ai commencé à avoir le problème qu'après avoir mis à jour macports. Le seul inconvénient à l'utilisation de macports bash à partir du terminal est qu'il me prévient maintenant de la fin des processus en cours lorsque j'essaie de fermer ma fenêtre de terminal - avez-vous rencontré ce problème ?

6voto

Loïc Wolff Points 14389

Vous devez fournir les fonctions d'achèvement des commandes. Ajoutez-les à votre fichier .bashrc_profile avant le PS1 :

. /opt/local/etc/bash_completion.d/git-completion

0 votes

Git-completion.bash peut être trouvé ici : raw.github.com/git/git/master/contrib/completion/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X