Blog

LISTAR TODOS OS POSTS - Assine os feeds dos posts e comentários

Git Bash Completion

Publicado/atualizado em 04/06/2008 16:46

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:

Permalink: http://eustaquiorangel.com/posts/git_bash_completion

salvar no del.icio.ussalvar no diggsalvar no rec6 Veja o que estão dizendo sobre isso.

Comente

Linhas em branco viram saltos de linha. Se você quiser mostrar algum código, por favor use o pastebin e informe a URL.

*

*

Responda: Qual o nome do kernel que o Linus Torvalds criou?  
Clique aqui se não souber essa resposta!

* campos obrigatórios

Comentários

1 - Ozéias Sant'ana disse em 04/06/2008 21:07

Cara q legal!! Vou usar hehehe!

Eu estou desenvolvendo Rails no GEdit e fiz um plugin para mostrar o branch atual -> http://blog.iconcreative.net/2008/5/31/git-branch-no-gedit.

Assim que sobrar um tempinho quero fazer para usar direto no GEdit os comandos do Git.

Grande Abraço!


2 - Felipe disse em 07/06/2008 14:32

E eu sempre me confundia e pressionava taba para git chec<tab> só que não funciona!

Vou testar.


3 - Marcio Garcia disse em 21/10/2008 22:22

Muito bom!

Parabens!


4 - SpamKids disse em 15/12/2008 09:52

Valeu cara!


5 - Otubo disse em 06/01/2009 16:02

Opa!

Peguei seu blog na lista do vimbook! Já está adicionado ao meu googlereader. :-)

E a propósito, excelente dica, caiu como uma luva para o meu projeto.

[]'s


6 - decko disse em 01/06/2009 17:24

Interessante! Eu achei uma outra maneira bem divulgada na web para mostrar o branch atual do diretorio, diferente desse que tá mostrando. Bacana!


Anterior Próximo Últimos Índice