web-dev-qa-db-fra.com

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

J'ai suivi http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without pour 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 ce -bash: __git_ps1: command not found tout ce que je fais avec une cd.

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

91
n179911

J'ai installé git en utilisant 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:

# Achèvement de la commande MacPorts Bash Shell 
 If [-f/opt/local/etc/bash_completion]; puis
    . /opt/local/etc/bash_completion
fi

ou pour MacPorts depuis la version 2.1.2 sur Mountain Lion:

# Achèvement de la commande MacPorts Bash Shell 
 If [-f /opt/local/etc/profile.d/bash_completion.sh]; puis
  . /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]; puis
    . /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_VERSION pour voir si c'est le problème. Si tel est le cas, entrez MacPorts bash en saisissant bash et essayez à nouveau de l'achèvement de git.

65
Lara Dougan

Si vous avez installé git en utilisant homebrew, vous pouvez ajuster un peu les conseils de MacPorts et les ajouter à vos .bash_profile et .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

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
55
grundprinzip

Tout ce que vous avez à faire est de placer le fichier git-completion.bash dans votre répertoire personnel bin et de placer les éléments suivants dans votre fichier .profile ou .bash_profile:

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 commande source 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).

26
iansheridan

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 actuel de bash-complete (2.0 r1) nécessite au moins un bash 4.1 pour fonctionner correctement. En tant que terminal OS X habituel utilise /bin/bash, il ne reçoit que 3.x. Vous devez modifier les paramètres de votre terminal pour utiliser /opt/local/bin/bash -l, comme décrit dans la documentation MacPorts: http://trac.macports.org/wiki/howto/bash-completion

13
Andy

Vous devez rechercher les fonctions de complétion de commande. Ajoutez à votre .bashrc_profile avant la PS1:

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

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é Invite sans la fonctionnalité d'achèvement (ce qui peut ralentir le processus), ils ont refactoré la fonctionnalité 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 obtenir le __git_ps1 afin de pouvoir l'utiliser dans votre invite PS1, vous devez également ajouter les éléments suivants à votre ~/.profile.

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

Un peu de fond est ici - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632

5
studgeek

Ou avec Homebrew

brew install bash-completion git-extras
3
derek73

J'ai trouvé une solution à une question similaire :

Le git-osx-installer est livré avec git-completion.bash et l’installe à /usr/local/git/contrib/completion/. Sourcez simplement ce fichier depuis votre .bash_profile pour obtenir __git_ps1.

2
John Mellor

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
2
haysclark

J'utilise brasser, donc un script maître bash_completion qui exécute tous ceux dans bash_completion.d ne semble 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
ecloud

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
1
jrc

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
thekingoftruth

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 package 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 bash obtenir 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/

0
Taylor Edmiston