web-dev-qa-db-fra.com

Comment alias 'git' à 'g' pour que les règles d'achèvement de bash soient préservées?

Si je fais ça:

alias g='git'

Je perds toutes les règles d’achèvement (c’est-à-dire que les branches et les télécommandes ne sont plus automatiquement complétées lorsque je frappe sur la touche TAB après avoir tapé, par exemple g Push o).

25
Paweł Gościcki

En copiant et en modifiant opportunément à partir de /etc/bash_completion.d/git, ajoutez les lignes suivantes à votre ~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
21
enzotib

Les dernières modifications finales en amont ont déplacé et renommé un peu les choses. La neige:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

Utilisez-le dans les versions récentes d’Ubuntu (par exemple 14.04, ainsi que Fedora 22+) lorsque vous rencontrez:

completion: function `_git' not found

pendant l'achèvement.

18
lzap

Dans ~/.bashrc:

alias g='git'
source /usr/share/bash-completion/completions/git
complete -o default -o nospace -F _git g

Via http://29a.ch/2013/8/9/fixing-bash-autocomplete-on-ubuntu-13-04

7
hnasarat

Tout d'abord, recherchez la commande d'achèvement d'origine. Exemple:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

Ajoutez-les maintenant à votre script de démarrage (par exemple ~/.bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

La ligne _completion_loader peut ne pas être requise. Toutefois, dans certaines situations, la fonction d'achèvement n'est chargée de manière dynamique qu'après avoir tapé la commande et appuyé sur TABla première fois. Donc, si vous n'avez pas utilisé la commande d'origine et essayez l'alias + TABname__, vous risquez d'obtenir une erreur du type "bash: completion: fonction introuvable".

2
wisbucky

Le moyen mis à jour de faire cela (complet ne fonctionnerait pas pour moi):

  1. cd - passe à votre répertoire personnel
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Ajoutez source ~/git-completion.bash à votre fichier .bashrc (si vous n'avez pas ce fichier en créer un dans votre dossier personnel, bash le recherchera automatiquement)
  4. Ajoutez alias g='git' à votre fichier .bashrc.
  5. Commencez une nouvelle session ou sourcez vos modifications avec source ~/.bashrc
1
Elijah Lynn

Par souci d'exhaustivité, j'aimerais ajouter une réponse à l'aide du fichier ~/.bash-completion, qui est obtenu à la fin du script bash-completion:

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete Gd _git_diff
_xfunc git __git_complete gb _git_branch

Ensuite, dans mon ~/.bashrc, je n'ai que les alias. J'étais en train d'essayer de:

  • évitez de polluer mon ~/.bashrc avec des commandes bash-finish (conservez-les à la place) ✓
  • éviter de confier la totalité de l'achèvement de git à mon shell

Unforutnately le _xfunc source le git-completion de toute façon. Je mettrai à jour cette réponse une fois que je saurai comment le faire correctement (je lui ai également demandé à déjeuner ici ).

0
kub1x