Le `git` de Homebrew n'utilise pas la complétion

144

Lorsque vous utilisez git d'OSX, après avoir modifié un fichier, je peux simplement le faire git commit <tab>, et cela complétera automatiquement le nom du fichier en 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 <tab>et qu'elle me "demande" simplement sur quel fichier je veux le faire, même en incluant ceux qui n'ont pas changé ).

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

Mon shell est zsh, et ne s'installe bash-completionni ne zsh-completionsfonctionne (même après avoir suivi les instructions de post-installation de homebrew).

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

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

Alors ne devrais-je pas pouvoir en utiliser un?

user137369
la source
Quelle version de zshet gitutilisez-vous?
simont
Dernier de homebrew. zsh 5.0.2 et git 1.8.1.3
user137369
Les autres gitcomplétions fonctionnent-elles ( git co<TAB>==> git commit, par exemple)?
simont
2
Je soupçonne que quelques problèmes différents se retrouvent ici, mais l'installation de git via brew a résolu cela pour moi. Semble zsh-completionsne pas être satisfait du mac git, même si cela fonctionnait bien avant (peut-être mis à jour aveuglément à 0.17.x).
ti7

Réponses:

287

Vous cherchez:

brew install git bash-completion

Comme l'indique le commentaire de warpc, vous devrez ajouter ce qui suit à votre ~/.bash_profilepour que la complétion 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 mises en garde 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 l'utiliser.Pour brew install bash-completion@2activer la complétion des onglets, ajoutez les éléments suivants ~/.bash_profilecomme décrit dans les mises en garde:

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étions qui peuvent être incluses dans le $(brew --prefix)/etc/bash_completion.d/répertoire.

Avantages Graham
la source
3
Mon shell est zsh. Est-ce que ça veut dire que je devrais faire brew install git zsh-completions? De plus, après l'installation de git avec homebrew, il est dit Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions, alors ne pourrais-je pas en utiliser un?
user137369
2
Ni l'installation bash-completionni zsh-completionsfonctionné (même après avoir suivi les instructions de homebrew après l'installation).
user137369
12
Avez-vous également ajouté dans ~ / .bash_profile pour le cas bash ce contenu: if [-f $ (brew --prefix) / etc / bash_completion]; puis . $ (brew --prefix) / etc / bash_completion fi
warpc
5
J'ai déjà installé git sans brew. Maintenant, je veux installer bash_completion en utilisant brew. J'ai couru brew install bash-completion et ajouté le code ci-dessus mais pas de chance
MagePsycho
3
Il est à noter que l'installation de git via brew est essentielle pour que cela fonctionne. Je ne savais pas que la version Apple de git faisait partie du problème. J'ai décliné cette réponse avant de le savoir et maintenant je ne peux pas voter pour :(
Reimus Klinsman
109

La complétion de l'onglet git de ce get 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
user2347638
la source
14
C'est un peu une triche de l'appeler une seule ligne lors de l'utilisation &&. Tout script bash pourrait être un one-liner comme ça.
user137369
1
Vous êtes le vrai MVP!
heez
2
Certainement mieux que la brew installméthode. Simplement parce que ça marche.
dchayka
2
J'ai cherché pendant des heures une solution pour savoir pourquoi bash ne prenait pas les commandes git-completion. Enfin, cela a fonctionné! Merci beaucoup!
TheAmazingKnight
1
C'est la solution réelle plus facile
Rigin Oommen
22

Au cas où quelqu'un d'autre ferait mon erreur stupide, essayez brew install git. J'utilisais le gitqui est livré avec Xcode et je ne savais pas que je n'avais jamais installé git de Homebrew pour obtenir les autocomplétions.

Harvey
la source
19

pour une raison quelconque, le fichier me manquait, $(brew --prefix)/etc/bash_completiondonc la réponse correcte de @Graham Perks n'a pas fonctionné pour moi

Cela a fini par résoudre le problème dans mon cas:

brew unlink bash-completion
brew link bash-completion
Anentropique
la source
Après avoir suivi la réponse de @Graham Pixel, cela m'a finalement permis de fonctionner.
Luke le
Cela a également fonctionné pour moi avec Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) et bash-completion 1.3 sur OS X Sierra 10.12.6.
jared
10

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

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

Tout fonctionne maintenant correctement. Je me demande cependant pourquoi Homebrew ne rend pas le bash_completionfichier exécutable lors de l'installation.

Asbjørn Ulsberg
la source
5
Non, c'est faux. bash_completionest censé être source'd donc les définitions sont dans votre shell; l'exécution n'aura aucun effet.
toddkaufmann
5

J'ai trouvé une solution de travail. C'est très récent (créé il y a 16 heures et commis il y a 2 heures), et il provient directement de l'homebrew .

brew install git --without-completions

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

user137369
la source
3
Je ne vois pas comment une installation gitsans achèvement pourrait améliorer la situation de l'achèvement qui ne fonctionne pas. Je crois que la réponse de Graham Perks stackoverflow.com/a/14970926/1199564 devrait être signalée comme la bonne réponse.
mgd
J'ai eu un problème similaire et j'ai résolu la réinstallation git --without-completionset le sourcing du bash-completion.bashfichier à partir de .bash_profilece qui est probablement remplacé en suivant la procédure standard.
Leonardo
1
Ce n'est pas une bonne réponse. La réponse de @graham perks est correcte.
CantGetANick
La réponse de @CantGetANick Graham n'a pas résolu mon problème, cela l'a fait, c'est pourquoi je l'ai marqué.
user137369
1
D'accord à 100% avec user137369: j'avais déjà installé le package bash-completion de homebrew, donc la réponse de @ graham ne pouvait pas fonctionner pour moi. Cependant, brew install gittout a été corrigé (pas besoin de --without-complétions). Je pense que c'est aussi une bonne réponse.
bronson
5

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

J'ai ensuite été informé d'un autre fichier qui bloque le processus de liaison homebrew, dans mon cas, c'était le cas /usr/local/share/zsh/site-functions/git-completion.bash. La suppression du fichier et l'exécution ont brew link gitrésolu le problème. Je suppose que c'était juste une mauvaise version de recette sur laquelle nous sommes tombés par hasard.

Jonathan Knapp
la source
1
Vous remarquerez également que la version de git que vous utilisez est celle d'Apple et non la version installée par Homebrew. Au moins dans mon cas, je l'ai fait. Vous pouvez vérifier la version avecgit --version
Jonathan Knapp
Nan. Cela ne fonctionne toujours pas pour moi. J'ai toujours recommencé à utiliser le git d'OSX, cette complétion est une fonctionnalité trop importante pour être abandonnée.
user137369
git-completion a cessé de fonctionner pour moi après la mise à jour vers Mavericks. Je devais brew reinstall gitet aussi brew reinstall bash-completionle faire fonctionner à nouveau.
Krešimir Nesek
3

Si vous avez $BASH_VERSION<4.1, par exemple, 3.2.57(1)-releasecontinuez 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 devez brew install bashobtenir la version, 4.4.12(1)-release vous 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 packages (brew, docker, tmux) mettront toujours des complétions dans $(brew --prefix)/etc/bash_completion.d/, vous pouvez donc ajouter:

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

Enfin, vous devriez pouvoir ajouter le script de complétion git si, pour une raison quelconque, la façon dont vous avez installé git ne l'ajoute à aucun de ces éléments:

[[ -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 l'obtenir et l'ajouter avec ce qui précède.

dlamblin
la source
1

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, tandis que .bashrc est exécuté pour les shells interactifs sans connexion" - from Quelle est la différence entre .bash_profile et .bashrc? Il me semble que MacOS Sierra ne s'exécute pas .bash_profilelors de l'ouverture d'une nouvelle fenêtre de terminal, uniquement.bashrc .

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

Antonyh
la source
1

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
ar31an
la source
Cela ne fait que multiplier le nombre d'avertissements
Hussain Akram
1

En 2019, en utilisant Bash v5, vous n'avez pas besoin de source explicitement le script de complétion git bash dans votre .bash_profileou.bashrc

  1. Assurez-vous d'avoir les deux lignes suivantes dans votre .bashrc
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"
  1. Téléchargez le script de complétion git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) et enregistrez-le /usr/local/etc/bash_completion.d/sousgit

C'est tout! Bash récupérera automatiquement le fichier de complétion git et activera la complétion.


Note latérale: Je recommande de mettre tous ces changements .bashrccar cela garantit que lorsque vous déposez dans un shell interactif (c'est-à-dire à partir de pipenv shell), les complétions seront chargées correctement car bash sera source .bashrcet NON .bash_profile.

cgons
la source
0

Cela peut avoir quelque chose à voir avec l'utilisation de libedit au lieu de readline dans Lion.

Essayez d'installer readline avant git.

brew install readline
Alex
la source
0

Pour ceux qui ont déjà installé le système de fin de brassage. Je n'avais pas installé le script de complétion git et je n'ai trouvé aucun robinet pour cela.

Alors je l'ai ajouté manuellement:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

Notez que vous devez renommer le fichier et supprimer l'extension pour qu'il fonctionne.

Si vous n'avez pas complètement installé ou git, installez-le dans la réponse acceptée.

brew install git bash-completion

Andrei
la source
0

Si vous avez utilisé homebrew pour installer git, il n'est probablement pas nécessaire d'installer quoi que ce soit pour prendre en charge l'achèvement de git. Le fichier "git-completion.bash" est quelque part (le mien était ici: /usr/local/git/contrib/completion/git-completion.bash)

Tout ce que vous avez à faire est de trouver le fichier: sudo find / -type f -name "git-completion.bash"

Puis source son chemin dans votre .bash_profile. Par exemple, j'avais besoin d'ajouter cette ligne à mon ~ / .bash_profile:

source /usr/local/git/contrib/completion/git-completion.bash

N'oubliez pas de rechercher votre ~ / .bash_profile ou de rouvrir votre terminal;)

à partir de: how-enable-git-tab-completion-bash-mac-os-x

Dozon Higgs
la source
@ user137369 c'est le cas - car ici, vous n'avez pas besoin d'installer des éléments déjà installés ...
Dozon Higgs
0

Je sais que c'est un ancien message, mais vous n'avez pas vraiment besoin d'installer de packages supplémentaires.

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_profilesi vous utilisez Bash:

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

Activer la complétion automatique des commandes GIT sur MAC-OS Mojave 10.14 Je suis développeur et j'utilise GIT à partir de la ligne de commande tout le temps. Quand je considère la perspective de développement, j'exécutais beaucoup de commandes en utilisant la ligne de commande pour les opérations GIT. La plupart du temps, il est très ennuyeux que MAC OS n'ait pas de support automatique pour la complétion de commande que je supporte partiellement. ainsi que les suggestions de commandes, ce qui signifie quelles sont les commandes disponibles pour les caractères tapés. Il est donc très difficile de taper une commande très longue et une tâche principalement répétitive car une faute de frappe se produit. :(

La complétion des onglets serait certainement plus rapide et plus facile. Malheureusement, l'installation par défaut de git sur certains ordinateurs Mac n'a pas activé la complétion des onglets.

Alors que je cherchais une solution au problème et qu'il existe plusieurs solutions trouvées à partir de la recherche Web, telles que StackOverflow, GitHub ainsi que du support. Malheureusement, ces solutions n'ont pas fonctionné pour moi et j'ai été frustré d'essayer différentes solutions tant de fois.

Je cherchais profondément et essayais différentes solutions et heureusement, c'est une solution facile. Vous trouverez ci-dessous les étapes que j'ai collectées à partir de plusieurs articles et finalement cela a fonctionné comme prévu. J'espère donc partager avec d'autres qui ont ce problème comme moi.

Si vous accédez à la recherche sur le Web, vous pouvez trouver de nombreuses solutions qui mentionnent le fichier git completion bash. Même guide GitHub aussi. Mais je vous suggère de vérifier d'abord si le fichier git-completion.bash est déjà dans votre ordinateur MAC avec le git-core ou autre chose qui provient de l'installation. vous pouvez utiliser la commande ci-dessous.

sudo find / -type f -name "git-completion.bash"

vous obtiendrez les résultats ci-dessous. (peut avoir une certaine différence selon le contenu)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

Je vous suggère de choisir lequel installé à partir de git-core

Si le script git-completion.bash n'existe pas sur votre machine, veuillez le récupérer à partir du fichier ci-dessous fourni ci-dessus et l'enregistrer sur votre machine locale dans un nouveau fichier appelé git-completion.bash dans le répertoire / usr / local / etc / répertoire bash_completion.d /.

https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks

Si vous utilisez le shell Bash, Git est livré avec un joli script d'auto-complétion que vous pouvez activer. Téléchargez-le directement à partir du code source Git sur

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Si le script git-completion.bash existe sur votre machine, mais ne se trouve pas dans le répertoire /usr/local/etc/bash_completion.d/, vous devez créer ce répertoire et y copier le fichier. La commande ci-dessous fera le travail:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

Après l'achèvement de ci-dessus. Le script git-completion.bash doit exister sur votre machine locale dans le répertoire / usr / local / etc / bash_completion.d /.

Vous devez maintenant actualiser votre profil en utilisant la commande ci-dessous. Il chargera votre fichier bash ajouté dans le contexte du terminal.

source ~/.bash_profile

Génial!!! vous l'avez fait. Démarrez simplement la fenêtre du terminal et essayez-le. Tapez simplement "git sta", il affichera les suggestions ci-dessous:

git sta
stage    stash    status
git chec<TAB> will show git checkout

voir mon post GitHub ici:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

Voir mon article Medium ici:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

Dilanka M
la source