Eu tenho um projeto que está usando git e marquei todos os lançamentos com uma tag.
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
Meu objetivo é listar os lançamentos e as datas de lançamento em uma interface web (tag / data de confirmação = data de lançamento). Atualmente listamos todos os lançamentos usando git tag
.
Como posso obter a hora e a data de quando a tag foi feita (ou para onde ela aponta)?
Respostas:
Use o
--format
argumento paragit log
:fonte
git log -1 --format=%ai v0.2.3
,.--format=%aI
("I" maiúsculo)git log -1 --format=%ai MY_TAG_NAME | cat
desativar visualização de páginagit log
para mostrar apenas um commit, aquele pertencente à tag. O comportamento padrão é mostrar todos os commits do especificado de volta ao primeiro commit no repositório.Isso sempre funcionou para mim:
Consulte a seção "FORMATOS BONITOS" da página de manual do git-log para obter detalhes sobre a string de formato, se desejar uma formatação de data diferente.
fonte
taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'
(observe as aspas simples, NÃO aspas) na seção [alias] de seu arquivo .gitconfig, e agora você tem um comando git taglog :)Mais uma opção:
git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"
Consulte https://git-scm.com/docs/git-for-each-ref#_field_names para opções de formato
%(creatordate)
dá a data do commit apontado, para ver a data em que a tag foi criada em uso%(taggerdate)
Você pode incorporar o shell diretamente:
$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" "refs/tags/*" ref='v1.10' dt='1483807817' ref='v1.11' dt='1483905854' ref='v1.12.0' dt='1483974797' ref='v1.12.1' dt='1484015966' ref='v1.13' dt='1484766542' ref='v1.2' dt='1483414377' ref='v1.3' dt='1483415058' ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'. ref='v1.3.1' dt='1483487085' ref='v1.4' dt='1483730146' ref='v1.9' dt='1483802985'
fonte
git for-each-ref --format="%(taggerdate:unix)" refs/tags
ou como substring emgit for-each-ref --format="%(taggerdate:raw)" refs/tags
git tag --format "%(refname:short) %(creatordate:short)"
Observe que ambas as soluções acima fornecem a data de confirmação, que pode ser totalmente diferente de quando o commit foi marcado para lançamento. Para obter a data da própria tag, você precisa encontrar a própria tag com
rev-parse
, lê-la ecat-file
, em seguida, analisá-la. Um pequeno pipeline:git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
fonte
Não existe uma opção simples no comando git tag para fazer isso. Eu achei mais conveniente executar
para listar todos os commits incluindo tags, se houver. Para listar apenas os commits que são marcados, use
Para detalhes, use
fonte
pode-se usar
gawk
(nãoawk
) para converter a data na linha "tagger" em algo legível por humanos:se não gostar
gawk
,date
pode ser usado para converter o tempo unix:e exemplo (
dnsmasq
git repo):fonte
dnsmasq
git repo, por exemplo:$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }'
Wed May 18 16:52:12 CEST 2016