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

24

Se eu fizer isso:

alias g='git'

Perco 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
fonte

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
fonte
15

Último upstream bash-completion moveu 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
fonte
6

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
fonte
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
fonte
1

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 após você digitar o comando e pressionar 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
fonte
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 o material onde ele pertence) ✓
  • evite fazer o sourcing de todo o git-completion no meu shell ☹

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

    
por kub1x 26.02.2016 / 14:00
fonte
-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
fonte
-1

Você pode definir os aliases como de costume:

alias g='git'

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

    
por Cyker 24.12.2016 / 08:27
fonte