J'ai besoin d'un moyen de répertorier toutes les balises de mon système par date de création, mais je ne suis pas sûr de pouvoir obtenir ces données via git-log. Des idées?
J'ai besoin d'un moyen de répertorier toutes les balises de mon système par date de création, mais je ne suis pas sûr de pouvoir obtenir ces données via git-log. Des idées?
Réponses:
Le tri par date de création des balises fonctionne avec des balises annotées et légères:
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tags
fait exactement ce dont j'avais besoin. Merci!
%(contents)
pour ajouter une annotation si nécessaire, par exemplegit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
git for-each-ref --sort=taggerdate --format '%(tag)'
--sort=creatordate
fonctionne à la fois pour les balises annotées et non annotées, mais --sort=taggerdate
ne semble fonctionner qu'avec les balises annotées. testé avecgit version 2.16.3
Git 2.8 (mars 2016) documente une autre option datant de git 1.4.4 (octobre 2006) .
Voir commit e914ef0 (05 janvier 2016) par Eric Wong ( ele828
) .
(Fusionné par Junio C Hamano - gitster
- en commit 108cb77 , 20 janvier 2016)
Voir le nouveau Documentation/git-for-each-ref.txt
Pour les objets de validation et de balise, les champs spéciaux
creatordate
etcreator
correspondront à la date appropriée ou au tuple nom-email-date des champscommitter
ou entagger
fonction du type d'objet.
Ceux-ci sont destinés à travailler sur un mélange de balises annotées et légères .
Donc, l'utilisation creatordate
fonctionne avec des balises:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Ou:
git tag --sort=-creatordate
Comme je le détaille dans " Comment trier les balises git par ordre de chaîne de version du formulaire rc-XYZW? ", Vous pouvez ajouter un ordre de tri à git tag
(depuis Git 2.0 juin 2014).
Cet ordre de tri inclut comme nom de champ (répertorié dans git for-each-ref
) taggerdate . Cela permet git tag --sort=taggerdate
(mentionné par DarVar ci-dessous )
À titre d'exemple, dans le git/git
repo, il listera lesv2.10.0
étiquette dernière:
v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0
L'ordre par défaut ne serait pas ( git tag
):
v2.1.2
v2.1.3
v2.1.4
v2.10.0
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.2.0
creatordate
!
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
Aussi belle sortie de (sans champ de date):
git log --tags --decorate --simplify-by-decoration --oneline
Pour voir l'historique complet avec les dépendances et les commits linéaires par bandes (uniquement les événements essentiels, comme le balisage et le branchement / fusion):
git log --graph --decorate --simplify-by-decoration --oneline --all
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"
et cela fonctionne mieux pour moi.
git tag --sort=-taggerdate
Selon la page de manuel, «Préfixe - pour trier par ordre décroissant de la valeur».
git tag
utilise les mêmes clés de tri que git-for-each-ref
, qui est l'endroit où les clés sont documentées.
Ce one-liner affiche les dates et les étiquettes sans aucun problème.
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
Production:
2015-04-01 storaged-2.0.0
2015-06-11 storaged-2.1.0
2015-08-06 storaged-2.1.1
...
Si vous n'aimez pas la façon dont les balises sont triées par défaut, vous pouvez trier par date avec l'option --sort=creatordate
, par exemple. Voir la réponse de VonC pour plus de détails.
Pour avoir les balises annotées et les balises légères triées ensemble, en fonction de la date de validation, j'utilise:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Cette commande listera chaque balise et l'identifiant de l'objet de validation associé, dans l'ordre chronologique.
Ce qui suit repose sur le commit, donc peu importe s'il contient des informations de date avec le commit:
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
La réponse ci-dessus par Josh Lee, repose sur une date de balise pour obtenir la commande correcte.
tac
- peut la changer en more
. Quoi qu'il en soit, votre commande a très bien fonctionné - merci!
En me basant sur les méthodes mentionnées précédemment, je voulais également voir la date réelle de la balise sur la liste, donc ma version en cours d'utilisation est:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'