¿Git se autocompleta en alias de bash?

Estoy usando go como un simple alias bash para git checkout branchname . Lo que extraño es la function de autocomplete que funciona con el command completo git checkout branchna... , pero no en el alias.

¿Hay alguna manera de orderarle a Bash que "henetworkinge" el "controller" de autocompletado para otro command?

Si puede encontrar la function de finalización utilizada por el command original, puede asignarla al alias utilizando complete -F .

Por ejemplo, en mi cuadro ubuntu, la function de finalización utilizada por git checkout es _git_checkout (se encuentra en /etc/bash_complete.d/git ).

Ejemplo

Antes de ejecutar complete -F :

 [[email protected]]$ git checkout <TAB><TAB> HEAD master origin/HEAD origin/master [[email protected]]$ alias go="git checkout" [[email protected]]$$ go <TAB><TAB> .git/ precommit_config.py README.md SvnSentinel/ .gitignore precommit.py startcommit.py tests/ 

Después:

 [[email protected]]$$ complete -F _git_checkout go [[email protected]]$$ go <TAB><TAB> HEAD master origin/HEAD origin/master 

Después de usar complete -F :

 complete -F _git_checkout go 

Tabbing after go puede resultar en:

 bash: [: 1: unary operator expected 

En lugar de complete , use __git_complete

Esta es la function incorporada de git bash para este propósito.

Después de declarar su alias, vincule la function correcta de autocompletelo:

 alias g="git" __git_complete g _git alias go="git checkout" __git_complete go _git_checkout alias gp="git push" __git_complete gp _git_push 

En Linux Mint, esto no funcionó para mí. Estaba recibiendo bash: [: 1: unary operator expected .

La siguiente respuesta funcionó bastante bien: la sección de resolución de problemas que el usuario me proporcionó fue bastante útil. https://superuser.com/questions/436314/how-can-i-get-bash-to-perform-tab-completion-for-my-aliases

En Ubuntu 16.04.3 LTS, el file que necesitaba para la fuente era /usr/share/bash-completion/completions/git . Entonces en .bash_custom (o .bashrc, lo que sea):

 [ -f /usr/share/bash-completion/completions/git ] && . /usr/share/bash-completion/completions/git __git_complete g __git_main 

(Esta respuesta pertenece a un comentario al progtwigdor en respuesta a jangosteve, pero como necesito 50 representantes para crear comentarios, lo enviaré como su propia respuesta).