Como listar todas as tags junto com a mensagem completa no git?

360

Quero que o git liste todas as tags, juntamente com a anotação completa ou a mensagem de confirmação. Algo assim está próximo:

git tag -n5

Isso faz exatamente o que eu quero, exceto que ele aparecerá apenas nas 5 primeiras linhas da mensagem de marca.

Eu acho que posso apenas usar um número muito grande. Qual é o número mais alto que posso usar aqui? É o mesmo em todos os computadores?

ATUALIZAÇÃO : Eu tive muito tempo para pensar sobre isso e agora acho que não quero necessariamente mostrar a totalidade de cada mensagem se algumas delas são extraordinariamente longas. Eu realmente não tinha nenhuma necessidade em particular que exigisse que eu visse mensagens massivas (além da minha propensão a ficar muito tempo em tudo o que escrevo, incluindo mensagens de etiqueta). Eu simplesmente não gostei da ideia de que isso não iria necessariamente me mostrar a mensagem inteira, pois isso me fez sentir como se estivesse escondendo informações de mim. Mas muita informação também pode ser uma coisa ruim.

still_dreaming_1
fonte
62
git tag -nfiz isso por mim
Martin Berger
11
git tag -nsomente imprime a primeira linha da anotação, de acordo com a página de manual.
Paul Price
A tag @INTPner, concordada, -l é usada para listar tags com um padrão específico. Editando a resposta.
Zubair

Respostas:

349

Tente fazer isso, listará todas as tags, juntamente com anotações e 9 linhas de mensagem para cada tag:

git tag -n9

também pode usar

git tag -l -n9

se houver tags específicas a serem listadas:

git tag -l -n9 v3.*

(por exemplo, o comando acima exibirá apenas tags começando com "v3".)

-l, --list Listar tags com nomes que correspondam ao padrão fornecido (ou todos, se nenhum padrão for fornecido). Executar "tag git" sem argumentos também lista todas as tags. O padrão é um curinga do shell (ou seja, corresponde ao uso de fnmatch (3)). Padrões múltiplos podem ser dados; se algum deles corresponder, a tag será mostrada.

Zubair
fonte
6
Isso imprimirá apenas a primeira linha de cada anotação.
Paul Price
3
@ Paul Price: somente você tem uma anotação; caso contrário, ela imprime a mensagem de confirmação. Concorde que esta não é a resposta.
Ciro Santilli escreveu:
3
De acordo com a documentação, a -lopção é filtrar um padrão. Não vejo como isso seria útil aqui. Estou esquecendo de algo?
still_dreaming_1 23/09
2
@INTPnerd sim, o -lé totalmente supérfluo aqui
Lambart
11
@ P.MyerNore Você deve usar uma versão estranha do git ou passar argumentos adicionais para fazer algo mais do que o que esta pergunta está perguntando. Mas é bom saber que, para certas situações, o -l é necessário.
still_dreaming_1
119
git tag -n99

Curto e grosso. Isso listará até 99 linhas de cada anotação de tag / mensagem de confirmação. Aqui está um link para a documentação oficial da tag git .

Agora, acho que a limitação de exibir apenas 99 linhas por tag é realmente uma coisa boa, pois na maioria das vezes, se houvesse realmente mais de 99 linhas para uma única tag, você não gostaria de ver todo o resto as linhas você faria? Se você quiser ver mais de 99 linhas por tag, sempre poderá aumentar isso para um número maior.

Quero dizer, acho que pode haver uma situação ou razão específica para querer ver mensagens massivas de tags, mas em que momento você não deseja ver a mensagem inteira? Quando tem mais de 999 linhas? 10.000? 1.000.000? O que quero dizer é que normalmente faz sentido limitar o número de linhas que você veria, e esse número permite definir isso.

Como estou argumentando sobre o que você geralmente quer ver quando olha suas tags, provavelmente faz sentido definir algo como um apelido (do comentário de Iulian Onofrei abaixo):

git config --global alias.tags 'tag -n99'

Quero dizer, você realmente não precisa digitar git tag -n99toda vez que deseja ver suas tags, não é? Uma vez que o alias esteja configurado, sempre que você quiser ver suas tags, basta digitar git tagsno seu terminal. Pessoalmente, prefiro levar as coisas um passo adiante e criar aliases de bash ainda mais abreviados para todos os meus comandos comumente usados. Para esse fim, você pode adicionar algo assim ao seu arquivo .bashrc (funciona em Linux e ambientes similares):

alias gtag='git tag -n99'

Quando você quiser ver suas tags, basta digitar gtag. Outra vantagem de seguir o caminho do alias (aliases do git ou aliases do bash ou qualquer outra coisa) é que agora você já tem um local em que pode adicionar mais personalizações à sua maneira pessoal, geralmente quer que suas tags sejam mostradas para você (como classificar eles de certas maneiras, como no meu comentário abaixo, etc). Depois de superar a dificuldade de criar seu primeiro alias, agora você perceberá como é fácil criar mais deles para outras coisas que você gosta de trabalhar de maneira personalizada, como git log, mas vamos salvar esse para uma pergunta / resposta diferente .

still_dreaming_1
fonte
3
git config --global alias.tags 'tag -n99'
Iulian Onofrei 30/10/19
@IulianOnofrei, legal, eu não sabia que o git permitia que você definisse aliases. Sei que isso está fora de tópico, mas não consigo resistir. Isto é o que estou usando agora (colocado no seu .bashrc ou algo parecido):alias gtag='git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags | sort -V'
still_dreaming_1
25

A resposta de Mark Longair (usando git show) é próxima do desejado na pergunta. No entanto, também inclui o commit apontado pela tag, juntamente com o patch completo para esse commit. Como a confirmação pode não estar relacionada à tag (é apenas uma confirmação que a tag está tentando capturar), isso pode ser indesejável. Eu acredito que o seguinte é um pouco melhor:

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done
Paul Price
fonte
O show de git de Mark não mostrou patches para o meu uso. Seu comando omite -p ou --patch, mas para ter certeza absoluta de pular o diff, pode-se usar: --no-patch. (em git v2.7.1 / mac)
AnneTheAgile
13

Está longe de ser bonito, mas você pode criar um script ou um alias que faça algo assim:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done
Mark Longair
fonte
Existe uma razão para não substituir git for-each-ref refs/tags/ --format='%(refname)'com git tag -l?
Shai Berger
@ShaiBerger: na prática, acho que não - acho que estava pensando que git tagé porcelana e git for-each-refcanalização, portanto a saída desse último deve ser mais estável para scripts.
precisa saber é o seguinte
10

Apenas mensagem da última tag:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
gaRex
fonte
2
Para qualquer outra pessoa acontecendo sobre isso a partir do Google: Se você quer mostrar a mensagem a partir de uma tag especial: git cat-file -p <tag> | tail -n +6
Kit Peters
6

Use a opção --format

git tag -l --format='%(tag) %(subject)'
Александр Туманов
fonte
2

Prefiro fazer isso na linha de comando, mas se você não se importa com uma interface da Web e usa o GitHub, pode visitar https://github.com/user/repo/tagse clicar no "..." ao lado de cada tag para exibir sua anotação.

agouge
fonte