Comment configurer l'achèvement de la ligne de commande git bash?

131

Par exemple, sur une nouvelle machine ubuntu, je viens de lancer sudo apt-get git, et il n'y a pas de complétion lors de la saisie, par exemple git check[tab].

Je n'ai rien trouvé sur http://git-scm.com/docs , mais l'achèvement IIRC est inclus dans le paquet git ces jours-ci et j'ai juste besoin de la bonne entrée dans mon bashrc.

Vincent Scheib
la source
Fonctionne pour moi hors de la boîte sur Ubuntu Precise (et Fedora 17).
Escargot mécanique
2
Pour vérifier si vous l'avez par défaut ou non, vous pouvez exécuter (cd ~ && exec cat .bashrc | grep completion).
aderchox

Réponses:

183

Sous Linux

sur la plupart des distributions, le script de complétion git est installé dans /etc/bash_completion.d/(ou /usr/share/bash-completion/completions/git) lorsque vous installez git, pas besoin d'aller sur github. Il vous suffit de l'utiliser - ajoutez cette ligne à votre .bashrc:

source /etc/bash_completion.d/git
# or
source /usr/share/bash-completion/completions/git

Dans certaines versions d'Ubuntu, la saisie semi-automatique de git peut être interrompue par défaut, la réinstallation en exécutant cette commande devrait résoudre le problème:

sudo apt-get install git-core bash-completion

Sur Mac

Vous pouvez installer la complétion git en utilisant Homebrew ou MacPorts.

Homebrew

if $BASH_VERSION> 4: brew install bash-completion@2(version mise à jour) Faites particulièrement attention à la version de bash que vous avez par défaut pour MacOS avec la version 3.2.57 (1).

ajouter à .bash_profile:

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

Pour les anciennes versions de bash: brew install bash-completion

ajouter à .bash_profile:

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

MacPorts

sudo port install git +bash_completion

puis ajoutez ceci à votre .bash_profile:

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

plus d'informations dans ce guide: Installer l'achèvement de Bash git

Notez que dans tous les cas, vous devez créer un nouveau shell (ouvrir un nouvel onglet / fenêtre de terminal) pour que les modifications prennent effet.

Sergey Evstifeev
la source
1
La plupart des boîtes * nix (en particulier Ubuntu) ont déjà ce fichier, donc le simple fait de l'approvisionner auprès de mon utilisateur a résolu mon problème. Merci.
nevvermind
5
ubuntu peut l'avoir comme /etc/bash_completion.d/git-prompt
Catskul
2
J'ai Git mais pas /etc/bash_completion.d
sixty4bit
15
Dans mon Ubuntu 14.04, ce fichier est /usr/share/bash-completion/completions/git. /etc/bash_completion.d/git-promptest utilisé pour le support de l'invite git, pas pour la complétion.
Ray Chen
18
AVERTISSEMENT: La méthode homebrew Mac ne fonctionne que si vous avez installé git via homebrew, brew uninstall bash-completionpuis brew install gitsi vous aviez installé git via une autre méthode auparavant, les étapes ci-dessus fonctionneront.
patapouf_ai
66

J'ai eu le même problème, suivi des étapes ci-dessous:

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

puis ajoutez les lignes suivantes à votre .bash_profile(généralement sous votre dossier de départ)

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

source: http://code-worrier.com/blog/autocomplete-git/

Jospratik
la source
J'étais derrière un proxy, donc j'ai dû définir le proxy d'abord pour que la boucle fonctionne.Je export https_proxy=proxy_ip:proxy_portne comprends pas vraiment pourquoi il n'obtient pas les paramètres du système.
madlymad le
2
il n'est pas vraiment nécessaire de masquer ce fichier par un point devant son nom. Aussi: attention aux versions git (voir la réponse de wisbucky)
Walter Tross
42

La plupart des instructions que vous voyez vous indiqueront de télécharger

https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

et source cela dans votre script de démarrage bash comme .bashrc.

Mais cela pose un problème, car il fait référence à la masterbranche, qui est la dernière version degit-completion.bash . Le problème est que parfois il se cassera car il n'est pas compatible avec la version de git que vous avez installée.

En fait, pour le moment, cela va casser car la masterbranche git-completion.basha de nouvelles fonctionnalités qui nécessitent git v2.18, qu'aucun des gestionnaires de paquets et des installateurs n'a encore mis à jour. Vous obtiendrez une erreurunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config

La solution la plus sûre est donc de référencer la version / balise qui correspond au git que vous avez installé. Par exemple:

https://raw.githubusercontent.com/git/git/v2.17.1/contrib/completion/git-completion.bash

Notez qu'il a un v2.17.dans l'URL au lieu de master. Et puis, bien sûr, assurez-vous de trouver cela dans le script de démarrage bash.

wisbucky
la source
C'est la meilleure réponse macOS.
AShelly
Wow ... Après environ une heure à me casser la tête, ton commentaire était la clé. Merci pour cette solution! D'or!
Myke Carter
4
Le fichier spécifique à la version macos devrait déjà être sur le disque ici: /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bashJuste pour être sûr, je l'ai différent de la version 2.17.1 sur github et cela correspond.
jmt
18

Ubuntu 14.10

Installer git-coreetbash-completion

sudo apt-get install -y git-core bash-completion
  • Pour l'utilisation de la session actuelle

    source /usr/share/bash-completion/completions/git
  • Pour l'avoir toujours allumé pour toutes les sessions

    echo "source /usr/share/bash-completion/completions/git" >> ~/.bashrc
Andrzej Rehmann
la source
1
Merci, cela a fonctionné pour moi sur Ubuntu 16.04 LTS :)
Mrunal Pagnis
6

Faites-le simplement dans votre ~/.bashrc:

source /usr/share/bash-completion/completions/git

D'autres réponses vous disent d'installer bash-completion, vous n'avez pas besoin de le faire, mais si vous le faites, il n'est pas nécessaire de rechercher directement l'achèvement. Vous faites l'un ou l'autre, pas les deux.

Une solution plus générique consiste à interroger l'emplacement du système comme recommandé par le projet bash-completion:

source "$(pkg-config --variable=completionsdir bash-completion)"/git
FelipeC
la source
1
Votre solution générique a parfaitement fonctionné pour moi sur Ubuntu 18.04. Pour commencer, votre méthode est extrêmement concise - merci!
Jason R Stevens CFA
4

sur mon ubuntu il y a un fichier installé ici:

source /etc/bash_completion.d/git-prompt

vous pouvez suivre les liens dans le /usr/lib/git-coredossier. Vous pouvez y trouver une instruction, comment configurer PS1 ou utiliser__git_ps1

kisp
la source
3

Peut être utile pour quelqu'un: -

Après avoir téléchargé le .git-completion.bash à partir du lien suivant,

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

et en essayant d'utiliser la fonction __git_ps1, j'obtenais une erreur comme--

 -bash: __git_ps1: command not found

Apparemment, nous devons télécharger les scripts séparément de master pour que cette commande fonctionne, car __git_ps1 est défini dans git-prompt.sh. Donc, comme pour télécharger .git-completion.bash, récupérez le git-prompt.sh:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

puis ajoutez ce qui suit dans votre .bash_profile

source ~/.bash_git
if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
export PS1='\W$(__git_ps1 "[%s]")>'
fi

source ~ / .bash.git exécutera le fichier téléchargé et

export PS1='\W$(__git_ps1 "[%s]") La commande ajoutera le nom de la branche d'extraction après le répertoire de travail actuel (s'il s'agit d'un référentiel git).

Cela ressemblera donc à: -

dir_Name[branch_name] où dir_Name est le nom du répertoire de travail et branch_name sera le nom de la branche sur laquelle vous travaillez actuellement.

Remarque: __git_ps1 est sensible à la casse.

Entailles
la source
1

Arch Linux

Source /usr/share/git/completion/git-completion.bashdans l'un des fichiers de démarrage bash.

Par exemple:

# ~/.bashrc

source /usr/share/git/completion/git-completion.bash

Vous pourrez peut-être trouver le script dans d'autres endroits comme, /usr/share/bash-completion/completions/gitmais ces scripts n'ont pas fonctionné pour moi.

Rob
la source
-1

Ubuntu

Il y a une belle réponse ici . A travaillé pour moi sur Ubuntu 16.04

les fenêtres

Git Bash est l'outil pour permettre l'auto-complétion. Je ne sais pas si cela fait partie de la distribution standard, vous pouvez donc trouver ce lien également utile. En passant, Git Bash permet d'utiliser les commandes shell Linux pour travailler sur Windows, ce qui est une excellente chose pour les personnes qui ont de l'expérience dans l'environnement GNU / Linux.

andrgolubev
la source
-1

Sur Github dans le projet Git, ils fournissent un fichier bash pour compléter automatiquement les commandes git.

Vous devez le télécharger dans le répertoire personnel et vous devez forcer bash à l'exécuter. Il s'agit simplement de deux étapes et parfaitement expliqué (étape par étape) dans le billet de blog suivant.

blog code-worrier: autocomplete-git /

Je l'ai testé sur mac, il devrait également fonctionner sur d'autres systèmes. Vous pouvez appliquer la même approche à d'autres systèmes d'exploitation.

wasabi
la source