Potrzebuję sposobu, aby wyświetlić listę wszystkich tagów w moim systemie przed datą ich utworzenia, ale nie jestem pewien, czy mogę uzyskać te dane za pośrednictwem git-log. Pomysły?
Potrzebuję sposobu, aby wyświetlić listę wszystkich tagów w moim systemie przed datą ich utworzenia, ale nie jestem pewien, czy mogę uzyskać te dane za pośrednictwem git-log. Pomysły?
Odpowiedzi:
Sortowanie według daty utworzenia tagu działa z opisanymi i lekkimi tagami:
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tags
zrobił dokładnie to, czego potrzebowałem. Dzięki!
%(contents)
W razie potrzeby można użyć do dodania adnotacji, np.git for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
git for-each-ref --sort=taggerdate --format '%(tag)'
--sort=creatordate
działa zarówno dla tagów z adnotacjami, jak i bez adnotacji, ale --sort=taggerdate
wydaje się działać tylko z tagami z adnotacjami. testowane przy użyciugit version 2.16.3
Git 2.8 (marzec 2016) dokumentuje inną opcję sięgającą wstecz do gita 1.4.4 (październik 2006) .
Zobacz commit e914ef0 (05 stycznia 2016) autorstwa Erica Wonga ( ele828
) .
(Scalone przez Junio C Hamano - gitster
- w zobowiązaniu 108cb77 , 20 stycznia 2016 r.)
Zobacz nowe Documentation/git-for-each-ref.txt
W przypadku obiektów zatwierdzonych i oznaczonych, pola specjalne
creatordate
icreator
będą odpowiadały odpowiedniej krotce data lub nazwa-e-mail-data z pólcommitter
lub, wtagger
zależności od typu obiektu.
Są one przeznaczone do pracy nad połączeniem oznaczonych i lekkich tagów .
Więc używanie creatordate
działa z tagami:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Lub:
git tag --sort=-creatordate
Jak szczegółowo opisałem w „ Jak sortować tagi git według kolejności ciągów wersji w postaci rc-XYZW? ”, Możesz dodać porządek sortowania do git tag
(od Git 2.0 czerwiec 2014).
Ta kolejność sortowania obejmuje jako nazwę pola (wymienioną w git for-each-ref
) taggerdate . To pozwala na git tag --sort=taggerdate
(wspomniane przez DarVar poniżej )
Na przykład w git/git
repozytorium wyświetli v2.10.0
tag jako ostatni:
v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0
Domyślna kolejność nie ( 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"
Również ładne wyjście z (bez pola daty):
git log --tags --decorate --simplify-by-decoration --oneline
Aby zobaczyć pełną historię z zależnościami i zatwierdzeniami liniowymi w paski (tylko niezbędne zdarzenia, takie jak tagowanie i rozgałęzianie / scalanie):
git log --graph --decorate --simplify-by-decoration --oneline --all
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"
i dla mnie to działa najlepiej.
git tag --sort=-taggerdate
Zgodnie ze stroną podręcznika „Prefiks - sortowanie w porządku malejącym wartości”.
git tag
używa tych samych kluczy sortowania git-for-each-ref
, co, gdzie klucze są dokumentowane.
Ta jednowierszowa wyświetla daty i tagi bez problemu.
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
Wynik:
2015-04-01 storaged-2.0.0
2015-06-11 storaged-2.1.0
2015-08-06 storaged-2.1.1
...
Jeśli nie podoba ci się domyślne sortowanie tagów, możesz --sort=creatordate
na przykład posortować według daty za pomocą opcji . Zobacz odpowiedź VonC, aby uzyskać więcej informacji.
Aby całkowicie posortować tagi z adnotacjami i lekkie tagi na podstawie daty zatwierdzenia, używam:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
To polecenie wyświetli wszystkie znaczniki i powiązany identyfikator obiektu zatwierdzenia, w porządku chronologicznym.
Następujące elementy zależą od zatwierdzenia, więc nie ma znaczenia, czy zawiera informacje o dacie z zatwierdzeniem:
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
Powyższa odpowiedź Josha Lee opiera się na dacie tagu, aby uzyskać poprawną kolejność.
tac
- może zmienić je na more
. W każdym razie Twoje polecenie zadziałało świetnie - dzięki!
Opierając się na wspomnianych wcześniej metodach, chciałem również zobaczyć aktualną datę tagu na liście, więc moja wersja użytkowa to:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'