Como alias 'git' para 'g' para que as regras de conclusão do bash sejam preservadas?

25

Se eu fizer isso:

alias g='git'

Eu perdi todas as regras de conclusão (ou seja, as ramificações e os controles remotos não estão mais sendo concluídos automaticamente quando eu pressiono o TAB depois de digitar, por exemplo g push o ).

    
por Paweł Gościcki 19.09.2011 / 15:02

8 respostas

20

Copie e modifique oportunamente a partir de /etc/bash_completion.d/git , adicione as seguintes linhas ao seu ~/.bashrc :

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
    
por enzotib 19.09.2011 / 15:20
17

O upstream mais recente do bash-completion mudou e renomeou um pouco as coisas. Agora é:

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

Use isso em versões recentes do Ubuntu (por exemplo, 14.04, também Fedora 22+) quando encontrar:

completion: function '_git' not found

durante a conclusão.

    
por lzap 30.06.2015 / 16:58
7

Em ~/.bashrc :

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

Via link

    
por hnasarat 22.10.2014 / 17:48
2

Primeiro, procure o comando de conclusão original. Exemplo:

$ complete | grep git

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

Agora, adicione-os ao seu script de inicialização (por exemplo, ~ / .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

A linha _completion_loader pode não ser necessária. Mas, para algumas situações, a função de conclusão é carregada apenas dinamicamente depois que você digita o comando e pressiona TAB na primeira vez. Portanto, se você não tiver usado o comando original e tentar o alias + TAB , poderá receber um erro como "bash: completion: function not found".

    
por 27.07.2018 / 00:59
1

A maneira atualizada de fazer isso (completo não funcionaria para mim):

  1. cd - mude para o seu diretório pessoal
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Adicione source ~/git-completion.bash ao seu arquivo .bashrc (se você não tiver esse arquivo, crie um em sua pasta pessoal, o bash irá procurá-lo automaticamente)
  4. Adicione alias g='git' ao seu arquivo .bashrc.
  5. Inicie uma nova sessão ou crie suas alterações com source ~/.bashrc
por Elijah Lynn 30.07.2013 / 15:56
0

Apenas para completar, gostaria de adicionar uma resposta usando o arquivo ~/.bash-completion , que é originado no final do script de conclusão do bash:

_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

Em seguida, no meu ~/.bashrc , tenho apenas os aliases. Eu estava tentando:

  • evite poluir meu ~/.bashrc com o material de conclusão do bash (manter as coisas onde ele pertence) ✓
  • evite fazer o sourcing de toda a conclusão do git no meu shell ☹

Unforutnately, o _xfunc fornece a conclusão do git. Vou atualizar essa resposta assim que descobrir como fazê-lo corretamente (também perguntei no lunchpad aqui ).

    
por kub1x 26.02.2016 / 14:00
-1

Veja aqui: link

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

Aproveite! (^ o ^) /

    
por scue 14.05.2015 / 09:10
-1

Você pode apenas definir aliases como de costume:

alias g='git'

Em seguida, instale o complete-alias para que o bash complete o alias-aware.

    
por Cyker 24.12.2016 / 08:27