J'ai un projet qui utilise git et j'ai marqué toutes les versions avec une balise.
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
Mon objectif est de lister les sorties et les dates de sortie dans une interface web (tag / date de validation = date de sortie). Actuellement, nous listons toutes les versions en utilisant git tag
.
Comment puis-je obtenir l'heure et la date auxquelles la balise a été créée (ou le commit vers lequel elle pointe)?
Réponses:
Utilisez l'
--format
argument pourgit log
:la source
git log -1 --format=%ai v0.2.3
,.--format=%aI
(majuscule "I")git log -1 --format=%ai MY_TAG_NAME | cat
désactiver la vue de la pagegit log
de ne montrer qu'un seul commit, celui appartenant à la balise. Le comportement par défaut est d'afficher toutes les validations de celle spécifiée à la première validation dans le référentiel.Cela a toujours fonctionné pour moi:
Consultez la section "PRETTY FORMATS" de la page de manuel git-log pour plus de détails sur la chaîne de format si vous souhaitez un formatage de date différent.
la source
taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'
(notez les guillemets simples, PAS les guillemets doubles) dans la section [alias] de votre fichier .gitconfig, et maintenant vous avez une commande git taglog :)Une autre option:
git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"
Voir https://git-scm.com/docs/git-for-each-ref#_field_names pour les options de format
%(creatordate)
donne la date du commit pointé, pour voir la date à laquelle le tag a été créé lors de l'utilisation%(taggerdate)
Vous pouvez incorporer directement le shell:
$> 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'
la source
git for-each-ref --format="%(taggerdate:unix)" refs/tags
ou comme sous-chaîne dansgit for-each-ref --format="%(taggerdate:raw)" refs/tags
git tag --format "%(refname:short) %(creatordate:short)"
Notez que les deux solutions ci-dessus vous donnent la date de validation, qui peut être très différente de celle lorsque cette validation a été marquée pour la publication. Pour obtenir la date de la balise elle-même, vous devez trouver la balise elle-même
rev-parse
, la lire aveccat-file
, puis l'analyser. Un petit pipeline:git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
la source
Il n'y a pas d'option simple dans la commande git tag pour faire cela. J'ai trouvé le plus pratique à exécuter
pour lister tous les commits, y compris les balises s'il y en a. Pour lister uniquement les commits marqués, utilisez
Pour plus de détails, utilisez
la source
on peut utiliser
gawk
(notawk
) pour convertir la date dans la ligne "tagger" en quelque chose de lisible par l'homme:si on n'aime pas
gawk
alorsdate
peut être utilisé pour convertir l'heure unix:et exemple (
dnsmasq
git repo):la source
dnsmasq
git repo, par exemple:$ 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