Git: ferramentas & dicas

Personalizando o terminal

A primeira dica envolve atualizar o prompt do terminal para exibir o branch atual e se ele possui alguma modificação ou não. O resultado final é parecido com o apresentado abaixo:

Prompt personalizado com branch GIT

Existem inúmeras soluções disponíveis para exibir o branch e o status do seu repositório no terminal. Vou indicar a mais fácil, um script desenvolvido por Jim Myhrberg. O código-fonte está disponível no GitHub.

O primeiro passo é clonar o repositório:

git clone git://github.com/mikesten/git-aware-prompt.git

Feito isso, basta editar seu .bash_profile (ou .bashrc, ou .profile):

source <DIRETORIO_DO_REPOSITORIO_CLONADO>/main.sh
export PS1="\u@\h \w\[$txtcyn\]\$git_branch\[$txtylw\]\$git_dirty\[$txtrst\]\$ "

Aliases

Para agilizar o uso de comandos do git no dia-a-dia podemos criar aliases, ou atalhos, que apontam para comandos completos. Vamos começar adicionando alguns aliases simples. Para isto, vamos abrir o arquivo .gitconfig na nossa home e adicionar (ou atualizar) a seguinte seção:

[alias]
    co = checkout
    st = status
    a = add

Agora, digitando git co ou git st estaremos executando os comandos checkout e status respectivamente.

Os aliases não precisam ser comandos simples. Podemos passar também opções e parâmetros. Os exemplos abaixo oferecem uma visão melhor do histórico de um repositório:

lg = log -p
hist = log --pretty=format:’%Cred%h%Creset %C(bold blue)%Creset%C(yellow)%d%Creset %Cgreen(%cr)%Creset%n%w(80,8,8)%s%n’ --graph --name-status

Finalizando, dois aliases muito úteis. O alias this cria um repositório e o alias ignore adiciona entradas e cria, caso não exista, o arquivo .gitignore.

this = !git init && git add . && git commit -m \"initial commit\"
ignore =!([ ! -e .gitignore ] && touch .gitignore) | echo $1 >>.gitignore

git extras

https://github.com/visionmedia/git-extras/

Essa ferramenta implementa diversos novos comandos no leque padrão do git. TJ Holowaychuk, o criador do projeto, disponibilizou um post introdutório com um screencast: http://tjholowaychuk.com/post/26904939933/git-extras-introduction-screencast.

Alguns exemplos de comandos são:

git ignore
git undo
git summary
git changelog
git setup

git autocomplete

Por ser uma ferramenta de linha de comando, o git fica ainda mais poderoso quando habilitamos o recurso de autocomplete para seus comandos e repositórios.

No repositório oficial do git você encontra o arquivo git-completion.bash. A instalação é simples, basta fazer o download e executá-lo no seu .bash_profile ou .bashrc. Feito isso, tanto comandos quanto branches e tags estarão a apenas um de distância!

Hooks

Uma ferramenta poderosa e pouco explorada por desenvolvedores é a criação de hooks - comandos que são executados de acordo com certas ações do git.

Por exemplo, podemos criar um hook que executa alguma ferramenta de lint antes de enviar o commit, assegurando, assim, um padrão de código no repositório.

O exemplo abaixo executa uma validação pyflakes + pep8 em qualquer código python presente no commit.

#!/bin/sh
FILES=$(git diff --cached --name-status | grep -v ^D | awk '$1 $2 { print $2}' | grep -e .py$)
if [ -n "$FILES" ]; then
    flake8 -r --ignore=E501 $FILES
fi

Os hooks ficam na pasta .git/hooks do repositório e podem ser escritos em qualquer linguagem suportada por seu sistema operacional.

Livros & recursos