TLDR não anotado: confirmação; anotada: cometer, autor, data, (opcional) Comentário
Antony Hatchkins
Respostas:
255
TL; DR
A diferença entre os comandos é que um fornece uma mensagem de marca, enquanto o outro não. Uma tag anotada possui uma mensagem que pode ser exibida com git-show (1), enquanto uma tag sem anotações é apenas um ponteiro nomeado para uma confirmação.
Mais sobre tags leves
De acordo com a documentação : "Para criar uma marca leve, não forneça nenhuma das opções -a, -s ou -m, apenas forneça um nome de marca". Existem também algumas opções diferentes para escrever uma mensagem em tags anotadas:
Quando você usa git tag <tagname>, o Git cria uma tag na revisão atual, mas não solicita uma anotação. Será marcado sem uma mensagem (esta é uma marca leve).
Quando você usa git tag -a <tagname>, o Git solicita uma anotação, a menos que você também tenha usado o sinalizador -m para fornecer uma mensagem.
Quando você usa git tag -a -m <msg> <tagname>, o Git marca o commit e o anota com a mensagem fornecida.
Quando você usa git tag -m <msg> <tagname>, o Git se comporta como se você passasse o sinalizador -a para anotação e usasse a mensagem fornecida.
Basicamente, é apenas se você deseja que a tag tenha uma anotação e algumas outras informações associadas a ela ou não.
Existe uma diferença entre uma tag "anotação" e uma mensagem de confirmação?
21311 Steve Bennett
3
@SteveBennett Sim. Uma anotação de tag não é uma mensagem de confirmação. Você não pode vê-lo com git-log (1); você precisa usar o git-show (1).
27612 Todd A. Jacobs
115
A diferença entre as tags "anotadas" e "leves" vai além da mensagem. Você pode ter uma tag anotada sem uma mensagem ( git tag -a <tag> -m ''), mas uma tag anotada sempre possui tagger (autor) e data .
Piotr Findeisen 24/10
1
O mesmo para mim. As tags de versão geralmente têm mensagens bastante inúteis (pode dizer mais do que o nome? Para quê?). Infelizmente, esta resposta mais votada não menciona essa diferença.
Piotr Findeisen
44
Outra coisa importante a ser observada é que, quando você envia suas tags para um repositório remoto git push --follow-tags, somente as tags anotadas serão enviadas.
Xatoo
209
Empurre tags anotadas, mantenha local leve
man git-tag diz:
Tags anotadas destinam-se à liberação, enquanto tags leves destinam-se a rótulos de objetos particulares ou temporários.
E certos comportamentos se diferenciam entre si de maneiras que essa recomendação é útil, por exemplo:
as tags anotadas podem conter uma mensagem, criador e data diferentes da confirmação para a qual apontam. Portanto, você pode usá-los para descrever um release sem fazer um commit de lançamento.
Tags leves não possuem essas informações extras e não precisam delas, pois você as usará apenas para desenvolver.
Isso é muito mais claro que a resposta atualmente aceita. Obrigado.
Reece
43
A grande diferença é perfeitamente explicada aqui .
Basicamente, tags leves são apenas indicadores de confirmações específicas. Nenhuma informação adicional é salva ; por outro lado, as tags anotadas são objetos regulares , que possuem um autor e uma data e podem ser consultadas porque possuem sua própria chave SHA.
Se souber quem marcou o quê e quando é relevante para você, use tags anotadas. Se você deseja marcar um ponto específico no seu desenvolvimento , não importa quem e quando fez isso, as tags leves são boas o suficiente.
Normalmente, você deve usar tags anotadas, mas isso depende do mestre do Git do projeto.
Respostas:
TL; DR
A diferença entre os comandos é que um fornece uma mensagem de marca, enquanto o outro não. Uma tag anotada possui uma mensagem que pode ser exibida com git-show (1), enquanto uma tag sem anotações é apenas um ponteiro nomeado para uma confirmação.
Mais sobre tags leves
De acordo com a documentação : "Para criar uma marca leve, não forneça nenhuma das opções -a, -s ou -m, apenas forneça um nome de marca". Existem também algumas opções diferentes para escrever uma mensagem em tags anotadas:
git tag <tagname>
, o Git cria uma tag na revisão atual, mas não solicita uma anotação. Será marcado sem uma mensagem (esta é uma marca leve).git tag -a <tagname>
, o Git solicita uma anotação, a menos que você também tenha usado o sinalizador -m para fornecer uma mensagem.git tag -a -m <msg> <tagname>
, o Git marca o commit e o anota com a mensagem fornecida.git tag -m <msg> <tagname>
, o Git se comporta como se você passasse o sinalizador -a para anotação e usasse a mensagem fornecida.Basicamente, é apenas se você deseja que a tag tenha uma anotação e algumas outras informações associadas a ela ou não.
fonte
git tag -a <tag> -m ''
), mas uma tag anotada sempre possui tagger (autor) e data .git push --follow-tags
, somente as tags anotadas serão enviadas.Empurre tags anotadas, mantenha local leve
man git-tag
diz:E certos comportamentos se diferenciam entre si de maneiras que essa recomendação é útil, por exemplo:
as tags anotadas podem conter uma mensagem, criador e data diferentes da confirmação para a qual apontam. Portanto, você pode usá-los para descrever um release sem fazer um commit de lançamento.
Tags leves não possuem essas informações extras e não precisam delas, pois você as usará apenas para desenvolver.
git describe
sem opções de linha de comando vê apenas tags anotadasDiferenças internas
as tags leve e anotada são um arquivo
.git/refs/tags
que contém um SHA-1para tags leves, o SHA-1 aponta diretamente para uma confirmação:
imprime da mesma forma que o SHA-1 da HEAD.
Portanto, não admira que eles não possam conter outros metadados.
tags anotadas apontam para um objeto de tag no banco de dados de objetos.
contém o SHA do objeto de tag anotado:
e então podemos obter seu conteúdo com:
saída de amostra:
E é assim que ele contém metadados extras. Como podemos ver na saída, os campos de metadados são:
Uma análise mais detalhada do formato está presente em: Qual é o formato de um objeto de tag git e como calcular seu SHA?
Bónus
Determine se uma tag está anotada:
Saídas
commit
para leve, como não há objeto de tag, ele aponta diretamente para o committag
anotado, uma vez que existe um objeto de tag nesse casoListar apenas tags leves: como posso listar todas as tags leves?
fonte
A grande diferença é perfeitamente explicada aqui .
Basicamente, tags leves são apenas indicadores de confirmações específicas. Nenhuma informação adicional é salva ; por outro lado, as tags anotadas são objetos regulares , que possuem um autor e uma data e podem ser consultadas porque possuem sua própria chave SHA.
Se souber quem marcou o quê e quando é relevante para você, use tags anotadas. Se você deseja marcar um ponto específico no seu desenvolvimento , não importa quem e quando fez isso, as tags leves são boas o suficiente.
Normalmente, você deve usar tags anotadas, mas isso depende do mestre do Git do projeto.
fonte