quinta-feira, 22 de abril de 2010

Vamos instalar e configurar o Git?

Git é um sistema de controle de versão gratuito e opensource. É muito simples de manipular e foi projetado para ser usado desde pequenos projetos individuas até grandes projetos com diversas pessoas, com grande velocidade e eficiência.

Para instalar o git rode no terminal (Ubuntu):

$ sudo apt-get install git
A configuração do git fica guardada no arquivo .gitconfig na home do usuário. Você pode configurar o git editando esse arquivo manualmente, porém, recomento usar o comando git config pelo terminal que editará o arquivo pra você, e irá manter o padrão correto de configuração do arquivo.

Para manter a configuração de todos os seus projetos a mesma, utiliza-se o argumento --global.

Usuário


As configurações do usuário são importantes para identificar quem fez as alterações nos arquivos. Para quem usa o github, o e-mail configurado aqui deve ser o mesmo cadastrado no site, para que ele te identifique e relacione seus commits a você, além de colocar as informações cadastradas no gravatar, como sua foto.

$ git config --global user.name "Hugo Maia Vieira"
$ git config --global user.email "hugomaiavieira@gmail.com"

Cores


O uso de cores facilita bastante quando você vai ver alguma informação. Para facilitar a visualização do branch, diff, grep e status você pode ativar o uso de cores para esses comandos do git.

$ git config --global color.ui auto
Assim, ao rodar o git status, por exemplo, você vai ver os arquivos modificados adicionados e não adicionados ao commit em verde e vermelho respectivamente.

Editor


Ao fazer qualquer interação que precise de alguma entrada de texto, por exemplo um commit, o editor que você configurar aqui será aberto para você escrever, neste caso, a descrição do que foi alterado. No meu caso eu uso o vim.

$ git config --global core.editor vim

Abreviações/Apelidos


Algumas pessoas preferem usar abreviações em vez de digitar o nome do comando inteiro. Eu particularmente acho desnecessário, pois o comandos são curtos e o tab também ajuda bastante, mas para quem gosta ai vai um exemplo no estilo SVN

$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.co checkout
$ git config --global alias.st status

Essas são apenas as configurações mais básicas. Para mais informações sobre outras diversas configurações existentes veja a documentação.

Nota: Este post estava no meu blog antigo e não tive como trazer os comentários. Seguem o bom comentário que lá estava:
  • Hugo Lopes Tavares
    Aprendi um alias muito interessante com uma apresentação que o Gabriel Lima me enviou por e-mail:

    git config --global alias.gl "log --graph --pretty=oneline --abbrev-commit"
    O que isso fará é um log, mostrando um gráfico com contrabarras e pipes de merges, apenas uma linha com as informações do commit (hash e mensagem do commit) e fará uma abreviação do hash. Assim, um no should-dsl eu tive, entre outras mensagens:

    $ git gl
    * e7ce5fe should.thrown added
    * 5044b8b obsolete comments removed
    * 1bee06e matcher added: equal_to_ignoring_case
    * 2674658 updated version

    Abração!
[ ]'s

4 comentários:

  1. tô com uma dúvida bem + simples. é o seguinte: defini o ‘gedit’ como meu editor de commits; no terminal, ao digitar ‘git commit -a’, o gedit é aberto; digito as alterações, salvo, porém o commit não é ‘efetivado’… o que eu tenho de fazer para efetivamente ‘comitar’ ?

    ResponderExcluir
  2. Paulo,

    Pelo que entendi, fazendo alguns testes, quando você commita (roda o git commit) o git espera que:

    1. Seja iniciado um novo processo que bloqueia o processo do git
    2. O processo bloqueante seja finalizado
    3. O arquivo de mensagem do commit tenha sido modificado

    Ele tem que executar todos esses passos, se não, o commit não será realizado com sucesso.

    Se seu editor for o gedit, e já tiver uma instância do gedit aberta, o passo 1 não será completado. O processo do gedit já estará rodando e não irá bloquear o processo do git, que irá continuar seu fluxo, verificando que o arquivo de mensagem do commit não foi modificado. Assim, o git não completará o commit e retornará a seguinte mensagem: "Aborting commit due to empty commit message" (Abortando commit devido a mensagem de commit vazia).
    Se o gedit não estiver aberto, irá funcionar normalmente. O gedit será aberto, você digita a mensagem, salva o arquivo e fecha o gedit (tem que fechar o gedit e não apenas a aba em que o arquivo foi aberto). Pronto, commit feito.

    Eu recomendado que seja usado um editor que abra no próprio terminal (vim, nano, ...), pois dessa forma o processo do git sempre será bloqueado e você não terá problemas.
    Recomendo ainda mais que você use a opção -m onde você passa como argumento a mensagem de commit. Por exemplo:

    git commit -am "Mensagem do commit"

    Com isso você não perde o tempo de abrir um editor, salvar a mensagem e fechar o editor.

    Curiosidade: Nos testes, eu configurei o Opera como editor do git. Quando dei o commit, o Opera abriu o arquivo de mensagem do commit e bloqueou o processo do git. Abri o arquivo no gedit, modifiquei a mensagem, salvei e fechei o Opera. Ao fechar o Opera, desbloqueie o git, que verificou que o arquivo tinha sido modificado e o commit funcionou normalmente.

    Abraço!

    ResponderExcluir
  3. Percorrendo o google achei um alias muito bom, para log também, um pouco mais completo do que o Hugo Lopes mostrou:

    git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

    Além de mostrar o que o Hugo Lopes falou (com cores diferentes) mostra também a quanto tempo foi o commit e o autor. Saída com o should-dsl:

    $ git lg
    | * | | 0731fc5 - Remove python logo from should-dsl logo (8 months ago) <Hugo Maia Vieira
    * | | | ba68d35 - removed border from the last menu item (8 months ago) <Hugo Lopes Tavares
    * | | | 559af04 - removed that old suck**g renapi logo (8 months ago) <Hugo Lopes Tavares

    ResponderExcluir
  4. Fala Bernardo!
    Rapaz eu uso esse alias. Tá até no afterFormat.
    Esqueci de atualizar o post.
    Valeu!

    ResponderExcluir