Customize seu Git! .gitconfig

Quando se fala em controle de versão, a primeira coisa que vem a cabeça da grande maioria dos desenvolvedore é git. Neste post vamos falar um pouco sobre como melhorar ainda mais o seu desempenho com o git através da configuração e customização de comandos.

Níveis de customização

Uma das melhores funcionalidades do git é a capacidade de customização. Um exemplo de customização é uma coisa que todo mundo faz, e até é recomendado quando se instala o git, é configurar o seu nome de usuário e email:

$>git config --global user.name "Nome"
$>git config --global user.email email@email.com

Ao executar o um git config, as informações ficam salvas em um arquivo, que é lido pelo git quando algum comando é executado. No exemplo acima estamos criando uma configuração global do git, por isso a flag –global é utilizada. Isto quer dizer que qualquer diretório git do seu usuário irá utilizar essa configuração. As opções globais são colocadas em arquivo chamado .gitconfig no seu diretório home:

$>cat ~/.gitconfig
[user]
	name = Nome
	email = email@email.com

Um outro nível de customização se refere ao projeto atual. Um exemplo é quando você adiciona o repositório remoto “origin” ao seu projeto:

$>git remote add origin git@github.com/Nome/repo.git

Se você abrir o arquivo “.git/config” do seu projeto, você verá algo assim:

$>cat .git/config
[remote "origin"]
	url = git@github.com:Nome/repo.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

Essa configuração é exclusiva de um projeto, por isso fica armazenada dentro da pasta .git no diretório raiz do projeto.

O outro nível de customização do Git é relativo ao sistema como todo. Quando fizemos uma configuração global, o arquivo fica armazenado no diretório home do usuário, no entanto, as configurações a nível de sistema se aplicam a todos os usuário:

$>git config --system user.name "Nome"

As configurações de sistema ficam armazenadas em “/etc/gitconfig”, mas dificilmente são feitas.

Também existe uma ordem herárquica entre os níveis de configurações. As configurações de projeto sobreescrevem as configurações globais, que por sua vez, sobreescrevem as configurações de sistema. Ou seja em caso de conflito a prioridade de configuração é: projeto>global>sistema.

Assim, na maior parte do tempo você vai querer realizar configurações globais, para que tenham efeito em todos os seus projeto, deixando apenas as configurações de branches como locais.

Configurações

Todas as configurações do git podem ser feitas tanto executando comandos no terminal quanto editando o arquivo correspondente ao nível de customização. Por exemplo, executar o comando:

$>git config --global color.ui auto

é o mesmo que alterar o arquivo ~/.gitconfig e adicionar:

[color]
  ui = auto

Vamos então ficar com a segunda opção por ser mais rápida.

Primeiro vamos alterar as configurações de cores do git. Quando você executa um git status ou git log, por padrão, são apenas mostradas letras brancas no fundo preto. Na seção de configuração [color] é possível resolver isso, então abra o arquivo ~/.gitconfig e adicione o seguinte:

[color]
  status = auto
  diff = auto
  branch = auto
  interactive = auto
  ui = true

Com isso, quando você executar um git status, por exemplo, vão ser exibidos em vermelho os arquivos que não foram adicionados e em verde os que foram.

Uma outra configuração que eu também gosto muito é a de sempre utilizar a opção –rebase ao executar um git pull:

[branch]
  autosetuprebase = always

A diferença é que, ao executar apenas pull será criado um commit com o merge entre os branches. Quando se utiliza –rebase, o git remove seus commits locais, atualiza a base de código e em seguida aplica seus commits. Eu particularmente gosto disso pois seu histórico não fica “sujo” com commits sobre merge entre branches.

Existem várias outras configurações que podem ser aplicadas no git, no final do post tem dois links que falam sobre isso, vale a pena dar uma conferida.

Alias

Outra forma de customização do git é a utilização de aliases para os seus comandos. Um alias é só uma outra forma de executar um comando. Um exemplo bem simples é o seguinte:

[alias]
  co = checkout

Assim, ao executar git co é o mesmo que executar git checkout. No entanto é possível adicionar opções para os comandos também, alguns que eu gosto bastante são:

[alias]
  st = status -s
  lg = log --graph --pretty=oneline --abbrev-commit --decorate

Ao executar git st veremos apenas o nome dos arquivos e o estado atual deles, adicionado, não adicionado, etc. Uma maneira bem mais simples de executar o git status.

Ao executar git lg será mostrado o log do git em forma de grafo, mostrando os branches e as divisões, os commits serão exibidos em uma linha, o código SHA1 do commit será abreviado para o formato mínimo com sete dígitos e por fim será mostrado para qual commit o HEAD está apontando e os branches onde este commit está presente.

Informações customizadas

Também é possível configurar informações customizadas com o git, por exemplo:

[foo]
  bar = baz

Ou o seguinte comando:

$>git config foo.bar = baz

Essa informação pode ser recuperada da seguinte forma:

$>git config foo.bar
baz

Exemplo

O meu arquivo de configuração global é esse: (git://gist.github.com/3969565.git)

[alias]
  st = status -s -b
  co = checkout
  ci = commit
  lg = log --graph --pretty=oneline --abbrev-commit --decorate
  timeline = log --graph --branches --pretty=oneline --decorate --abbrev-commit
[color]
  status = auto
  diff = auto
  branch = auto
  interactive = auto
  ui = true
[branch]
  autosetuprebase = always
[push]
  default = tracking

Você pode utilizá-lo como exemplo e/ou adicionar seus próprio atalhos e configurações para melhorar ainda mais seu desempenho com o git.

Mais informações

Para mais informações sobre configurações do git, eu recomendo muito o seguinte video http://marakana.com/s/video_git_tips_and_tricks_for_ruby_teams,422/index.html. É uma palestra de Jared Grippe onde ele fala sobre a sua experiência com o Git e mostra vários exemplos de configurações e outros comandos legais do Git.

Um outro vídeo, bem mais longo, mas que fala com detalhe sobre as partes mais internas do Git é esse http://blip.tv/scott-chacon/git-tips-4232122 de Scott Chacon.

Anúncios

2 comentários sobre “Customize seu Git! .gitconfig

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s