Blog do TaQ

Git Bash Completion

Publicado em Developer

Logo do Git

Achei um trequinho bem interessante para quem usa o Git: o script git-completion.bash que permite inserir alguns recursos de auto-completar no bash. Tá, eu sei que podemos fazer alguns aliases para o Git e economizar digitação, mas olhem só que legal:

[taq@taqn bla (temp)]$ git <tab><tab>       
add                 diff                rebase 
am                  fast-export         relink 
annotate            fetch               remote 
apply               filter-branch       repack 
archive             format-patch        request-pull 
bisect              fsck                reset 
blame               gc                  revert 
br                  get-tar-commit-id   rm 
...

Só esse "resuminho" já me ajuda quando esqueço algum comando, mas tem mais:

[taq@taqn bla (master)]$ git checkout <tab>
HEAD     master   temp

[taq@taqn bla (master)]$ git checkout t<tab>emp 
Switched to branch "temp"

[taq@taqn bla (temp)]$ git co <tab> # ei! aquele 'co' é um alias!        
HEAD     master   temp   

[taq@taqn bla (temp)]$ git co tes<tab>te.txt # nomes de arquivos!

[taq@taqn bla (temp)]$ git log <tab>
HEAD     master   temp    

[taq@taqn bla (temp)]$ git log --<tab>
--abbrev=         --committer=      --min-age=        --reverse 
--abbrev-commit   --date=           --name-only       --root 
--after=          --date-order      --name-status     --since=
--all             --follow          --no-merges       --topo-order 
--all-match       --grep=           --not             --until=
--author=         --left-right      --pretty=         
--before=         --max-age=        --raw             
--cherry-pick     --max-count=      --relative-date

Ei, dá para brincar um monte com esse treco. Tem alguns detalhes que eu reparei que não sei se não entendi direito ou se são pequenos bugs (alguém mais sentiu falta do --stat do log ali em cima?), mas do jeito que está já está bem interessante! Para instalá-lo é fácil, podemos pegar o código do repositório acima ou verificar se a nossa distro contém o dito cujo. No meu caso, encontrei ele junto com o pacote do Git aqui no Slackware:

[taq@~]grep completion /var/log/packages/git-1.5.5-i486-1 
usr/doc/git-1.5.5/contrib/completion/
usr/doc/git-1.5.5/contrib/completion/git-completion.bash

Aí é só copiar para algum lugar no sistema onde você costuma deixar os seus scripts do bash e usar o source para incorporá-lo:

source git-completion.bash

E para por a cereja no bolo, alterar a variável do Bash PS1, definindo-a como '[\u@\h \W$(__git_ps1 " (%s)")]\$ ' (sendo que podemos customizar isso depois), e quando estivermos em um diretório que contenha um repositório o prompt irá nos mostrar a branch corrente:

[taq@taqn bla (master)]$ git co temp 
Switched to branch "temp"
[taq@taqn bla (temp)]$ 

Eu deixei a minha PS1 assim (tudo junto, sem quebrar a linha hein!):

PS1='\[\e]2;terminal \w\a\][\[\e[37;1m\]\u@\[\e[36;1m\]\h\w\[\e[32;40m
\]$(__git_ps1 " %s")\[\e[0m\]]\$ '

O que resultou em algo desse tipo:

Meu prompt no console

Algumas dicas de como configurar as cores vocês podem encontrar aqui.

E agora uma firulinha para o Vim. Como quando usamos o source com o script incorporamos as funções dele no bash, podemos pedir que uma das opções da nossa linha de status do Vim seja:

:set statusline=%{system('__git_ps1\ \%s')}

Isso vai mostrar a branch corrente na linha de status. Mudando de branch, é automaticamente atualizada. Legal!


Tags:


Comentários

comments powered by Disqus

Twitter