git ready

dicas diárias para o noob ao guru
por Nick Quaranto, traduzido pela comunidade RailsBr

tagging

publicado em 03 Feb 2009

Tagging no Git é uma ótima forma de indicar lançamentos de versões específicas de seu código, ou talvez se você precisa de uma forma para se referir exatamente a um commit em seu histórico por alguma razão. Este post vai mostrar o jeito certo (e errado) de usar tag no git.

Provavelmente a melhor forma de descrever uma tag é um post-it que se refere a um commit. Ele contém um nome, algo como v1.0.0 ou producao, e uma mensagem também se você quiser. Git para Cientistas da Computação visualiza uma tag como algo:

Então, como se cria uma tag? Só git tag v1.0.0 certo? ERRADO. Você geralmente não quer fazer isso. De fato, alguns sugerem que esse comando faz a coisa errada por padrão. Sem argumentos, git tag cria uma tag leve que é basicamente um branch que nunca move. Tags leves são úteis, talvez para marcar uma versão boa (ou ruim) conhecida, ou um punhado de commits que você precisará usar no futuro. Todavia, você provavelmente não quer fazer um push desse tipo de tags.

Normalmente, você quer pelo menos passar a opção -a para criar uma tag não assinada, ou assinar uma tag com sua chave GPG via as opções -s ou -u <key-id>. Uma vez que isso foi feito você pode usar git descrive para descobrir quantos commits você criou desde a última tag ou da última tag dada. Git-fu tem um ótimo tutorial de como usar esse comando.

Então vamos criar uma nova tag e ver como nós podemos nos referir a ela mesmo depois que o commit foi feito, então nós faremos um push para um remoto. Isso é bem mais fácil do que você pensa.

$ git tag -a v1.0.0 -m "Criando a primeira versão oficial."

$ git show v1.0.0 
  tag v1.0.0
  Tagger: Nick Quaranto <nick@quaran.to>
  Date:   Tue Feb 3 20:37:45 2009 -0500

  Criando a primeira versão oficial.
  commit a8d1b55c5d4bdec843d9942cabf1b678bc1d4eed
  Merge: 00b9675... 1b487b8...
  Author: Nick Quaranto <nick@quaran.to>
  Date:   Sun Nov 30 00:41:08 2008 -0500

      Merge branch 'master' of git@github.com:qrush/config

$ git describe --tags
  v1.0.0

$ touch test
$ git add test
$ git commit -am "Adicionando arquivos de teste"
  Created commit a7aafb8: Adicionando arquivos de teste
   0 files changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test

$ git describe --tags
  v1.0.0-1-ga7aafb8

$ git push --tags
  Counting objects: 40, done.
  Compressing objects: 100% (37/37), done.
  Writing objects: 100% (40/40), 29.32 KiB, done.
  Total 40 (delta 15), reused 9 (delta 2)
  To git@github.com:qrush/config.git
   * [new tag]         v1.0.0 -> v1.0.0

O segundo comando describe nos mostra que nós temos um commit após aonde a última tag foi feita. Este é um jeito fácil de descobrir quanto trabalho foi feito desde o último commit. Também, a opção --tags foi usada para fazer o push, mas o push para a tag poderia ter sido feito com git push origin : v1.0.0. No GitHub (ou em seu remoto) você deveria ver a tag que foi feito o push:

Outra nota, se você fez um push de tags que você quer mover ou renomear, o Git fará com que isso seja ridiculamente incômodo de ser feito. Confira na manpage para uma explicação de o porque de isso ser complicado e que deveria ser feito com cautela.

Se você tem uma forma única de integrar tags no seu workflow com GIT, deixe-nos saber pelos comentários ou até envie uma dica para que outros possam aprender!