web-dev-qa-db-fra.com

`Git` de Homebrew n'utilisant pas la complétion

Lors de l’utilisation de git OSX, après avoir modifié un fichier, je peux simplement faire git commit <tab>, ce qui complétera automatiquement le nom du fichier avec celui qui a été modifié. Cependant, si j’installe une version plus récente de git à partir de homebrew et que je l’utilise, cette fonctionnalité ne fonctionne plus (c’est-à-dire que j’appuie sur <tab> et qu’elle me «demande» sur quel fichier je veux le faire, même ceux qui n’ont changements).

Quelqu'un peut-il expliquer pourquoi et comment résoudre ce problème? Je préférerais utiliser le git de homebrew, car il est plus à jour.

Mon shell est zsh, et l’installation de bash-completion ou zsh-completions n’a pas fonctionné (même après avoir suivi les instructions de post-installation de homebrew).

De plus, après avoir installé git avec homebrew, il est écrit:

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions

Donc, ne devrais-je pas pouvoir en utiliser un?

115
user137369

Vous cherchez:

brew install git bash-completion

Comme l'indique le commentaire de warpc, vous devez ajouter ce qui suit à votre ~/.bash_profile pour que le travail de bash de homebrew fonctionne:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Ce qui précède est mentionné dans les avertissements lorsque vous installez la formule de complétion-bash.


Remarque: si vous utilisez Bash v4 ou une version ultérieure (via brew install bash), vous souhaiterez utiliser brew install bash-completion@2. Pour permettre la complétion par des tabulations, ajoutez ce qui suit à ~/.bash_profile comme décrit dans les avertissements:

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

L'exportation supplémentaire est nécessaire pour git, docker, youtube-dl et d'autres compléments pouvant être inclus dans le répertoire $(brew --prefix)/etc/bash_completion.d/.

233
Graham Perks

Cette opération complète de l'onglet git fonctionne sous OSX sans avoir à redémarrer votre terminal:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile
88
user2347638

pour une raison quelconque, le fichier manquait à $(brew --prefix)/etc/bash_completion et la réponse correcte de @Graham Perks ne m'a pas aidé

La solution dans mon cas était la suivante:

brew unlink bash-completion
brew link bash-completion
18
Anentropic

Si quelqu'un d'autre fait mon erreur stupide, essayez brew install git. J'utilisais la git fournie avec Xcode et je ne réalisais pas que je n'avais jamais installé le git de Homebrew pour obtenir les compléments automatiques.

15
Harvey

J'ai résolu le problème en découvrant que $(brew --prefix)/etc/bash_completion a retourné Permission denied lors de l'exécution. Donc après un simple:

chmod +x $(brew --prefix)/etc/bash_completion

Tout fonctionne maintenant bien. Cependant, je me demande pourquoi Homebrew ne rend pas le fichier bash_completion exécutable lors de l'installation.

9
Asbjørn Ulsberg

J'ai eu le même problème et j'ai même trouvé ce post ce matin. J'ai corrigé le problème en mettant à jour brew avec brew update, puis en réinstallant git avec brew reinstall git.

J'ai ensuite été informé d'un autre fichier qui bloquait le processus de liaison homebrew, dans mon cas, il s'agissait de /usr/local/share/zsh/site-functions/git-completion.bash. Supprimer le fichier et exécuter brew link git a résolu le problème. En devinant que c'était juste une mauvaise version de recette, nous sommes tombés sur.

5
Jonathan Knapp

Trouvé une solution de travail. C'est très récent (écrit il y a 16 heures et commis il y a 2 heures), et ça vient directement de homebrew .

brew install git --without-completions

Je viens de l'essayer, et cela fonctionne enfin comme prévu.

4
user137369

Étape 1: Téléchargez le script d'achèvement automatique: 

cd ~
curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

Étape 2: Mise à jour des fichiers .bash_profile et .bashrc

echo "source ~/git-completion.bash" >> .bash_profile
echo "source ~/git-completion.bash" >> .bashrc

Cela fonctionnera comme un charme

Via https://www.anintegratedworld.com/git-tab-autocomplete-on-osx-10-11-el-capitan/

2
Feuda

Si vous avez $BASH_VERSION <4.1, par exemple 3.2.57(1)-release, continuez avec:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Cependant, si vous avez brew install bash pour obtenir la version 4.4.12(1)-releasevous pouvez utiliser les complétions meilleures et plus complètes dans:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

Notez que certains paquets (brew, docker, tmux) vont encore mettre quelques complétions dans $(brew --prefix)/etc/bash_completion.d/ afin que vous puissiez ajouter:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

Enfin, vous devriez pouvoir ajouter le script d'achèvement de git si, pour une raison quelconque, la façon dont vous avez installé git ne l'ajoute à aucun de ceux-ci:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \
    -o $(brew --prefix)/etc/bash_completion.d/git

Vous pouvez obtenir et l'ajouter avec ce qui précède.

2
dlamblin

Pour moi, je devais mettre 

source $(brew --prefix)/etc/bash_completion

dans .bashrc (pas .bash_profile) pour que cela fonctionne.

".bash_profile est exécuté pour les shells de connexion, alors que .bashrc est exécuté pour les shells interactifs sans login" - from Quelle est la différence entre .bash_profile et .bashrc? Il me semble que MacOS Sierra n'exécute pas .bash_profile lors de l'ouverture d'une nouvelle fenêtre de terminal, uniquement .bashrc.

Je ne le mettrais pas dans _bash_profile, car je devrais alors redémarrer/déconnecter pour que les mises à jour prennent effet.

1
antonyh

Cela a fonctionné pour moi dans Mojave (OSX 10.14.1):

brew install bash-completion

Ajoutez ensuite la ligne suivante à votre ~/.bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
1
ar31an

Je sais que ceci est un ancien message, mais vous n'avez pas vraiment besoin d'installer de paquet supplémentaire.

Homebrew vous informe qu'il existe un répertoire avec tout ce dont vous avez besoin.

Vous pouvez simplement ajouter la ligne suivante à votre .bash_profile si vous utilisez Bash:

source /usr/local/etc/bash_completion.d/git-completion.bash
0
aldavigdis

Cela peut avoir quelque chose à voir avec libedit utilisé au lieu de readline dans Lion. 

Essayez d’installer readline avant git.

brew install readline
0
Alex