¿Cómo alias 'git' a 'g' para que se conserven las reglas de finalización de bash?

23

Si hago esto:

alias g='git'

Pierdo todas las reglas de finalización (es decir, las ramas y controles remotos ya no se completan automáticamente cuando presiono TAB después de tipear, por ejemplo g push o ).

    
pregunta Paweł Gościcki 19.09.2011 - 13:02

8 respuestas

20

Copiando y modificando oportunamente desde /etc/bash_completion.d/git , agregue las siguientes líneas a su ~/.bashrc :

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
    
respondido por el enzotib 19.09.2011 - 13:20
14

La última subida de bash upstream movió y renombró las cosas un poco. Ahora es:

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

Use esto en versiones recientes de Ubuntu (por ejemplo, 14.04, también Fedora 22+) cuando se encuentre con:

completion: function '_git' not found

durante completar.

    
respondido por el lzap 30.06.2015 - 14:58
6

En ~/.bashrc :

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

A través de enlace

    
respondido por el hnasarat 22.10.2014 - 15:48
1

La manera actualizada de hacer esto (completar no funcionaría para mí):

  1. cd - cambia a tu directorio de inicio
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Agregue source ~/git-completion.bash a su archivo .bashrc (si no tiene este archivo, haga uno en su carpeta de inicio, bash lo buscará automáticamente)
  4. Agregue alias g='git' a su archivo .bashrc.
  5. Comience una nueva sesión o fuente sus cambios con source ~/.bashrc
respondido por el Elijah Lynn 30.07.2013 - 13:56
1

Primero, busque el comando de finalización original. Ejemplo:

$ complete | grep git

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

Ahora agréguelos a su secuencia de comandos de inicio (por ejemplo, ~ / .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 línea _completion_loader puede no ser necesaria. Pero en algunas situaciones, la función de finalización solo se carga dinámicamente después de escribir el comando y presionar TAB la primera vez. Entonces, si no ha usado el comando original y prueba el alias + TAB , puede recibir un error como "bash: completion: function not found".

    
respondido por el wisbucky 26.07.2018 - 22:59
0

Solo para completar, me gustaría agregar una respuesta usando el archivo ~/.bash-completion , que se obtiene al final del 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

Entonces en mi ~/.bashrc tengo solo los alias. Estaba tratando de:

  • Evitar que mi ~/.bashrc sea saturado con material de finalización de bash (mantener las cosas donde pertenece) ✓
  • evite abastecer todo el git-completion en mi caparazón ☹

Desgraciadamente, el _xfunc ordena el git-completion de todos modos. Actualizaré esta respuesta una vez que descubra cómo hacerlo correctamente (también pregunté en el panel de almuerzo aquí ).

    
respondido por el kub1x 26.02.2016 - 13:00
-1

Mira aquí: enlace

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

¡Disfruta! (^ o ^) /

    
respondido por el scue 14.05.2015 - 07:10
-1

Puede definir alias como siempre:

alias g='git'

Luego, instala alias completo para hacer que bash complete alias-aware.

    
respondido por el Cyker 24.12.2016 - 07:27

Lea otras preguntas en las etiquetas