2013-09-06 6 views
21

Dane wyjściowe z git tag są uporządkowane alfabetycznie. Chciałbym, aby zostało to uporządkowane chronologicznie (data zatwierdzenia, do którego są przypisane, a nie data, w której zostały utworzone), w przeciwnym razie wynik powinien pozostać taki sam.`tag git` posortowany w porządku chronologicznym daty zatwierdzenia wskazał na

Próbowałem już sugestii od http://networkadmin20.blogspot.de/2010/08/howto-list-git-tags-by-date.html, ale kolejność jest wciąż taka sama.

Aby upewnić się, że nie jest to błąd z mojego repozytorium, próbowałem następujące czystą repozytorium:

[email protected] ~/Projects/sandbox % mkdir chronogit 
[email protected] ~/Projects/sandbox % cd chronogit 
[email protected] ~/Projects/sandbox/chronogit % git init 
Initialized empty Git repository in /home/soeren/Projects/sandbox/chronogit/.git/ 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % touch a 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git add a 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'a' 
[master (root-commit) f88e0e9] a 
0 files changed 
create mode 100644 a 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag 'A-first' 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git mv a b 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'c' 
[master ecc0c08] c 
1 file changed, 0 insertions(+), 0 deletions(-) 
rename a => b (100%) 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag 'C-second' 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git mv b c 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'b' 
[master e72682d] b 
1 file changed, 0 insertions(+), 0 deletions(-) 
rename b => c (100%) 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag 'B-third' 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git tag 
A-first 
B-third 
C-second 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git for-each-ref refs/tags --sort=taggerdate --format="%(refname:short)" 
A-first 
B-third 
C-second 

Pożądana wyjściowy:

A-first 
C-second 
B-third 

lub, ponieważ odwracanie to powinnam „t być zbyt trudne:

B-third 
C-second 
A-first 

Edit: Jak zauważył w komentarzach, this question jest dość podobna, więc próbowałem następujące:

[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%ai %d"   
2013-09-06 16:08:43 +0200 (HEAD, B-third, master) 
2013-09-06 16:08:21 +0200 (C-second) 
2013-09-06 16:07:42 +0200 (A-first) 

Kolejność jest w porządku, ale teraz walczę z formatowaniem ...

[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%(refname:short)" 
%(refname:short) 
%(refname:short) 
%(refname:short) 
[email protected] ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --format="%(refname:short)" 
%(refname:short) 
%(refname:short) 
%(refname:short) 
+1

wydaje duplikat [Wątek] (http: // stackoverflow.com/questions/6269927/how-can-i-list-all-tags-in-my-git-repository-by-date-they-were-created) – Mali

+2

"znaczniki z adnotacjami" są dla mnie nowością, to dobre słowo do wyszukiwania. Ale pytanie, które tam zadano, o kolejność tagów, kiedy zostały utworzone, chciałbym je zamówić zgodnie z datami zatwierdzeń, do których są przypisane, wyjaśnię to bardziej szczegółowo w pytaniu, dzięki. W komentarzach do pytania, które podłączyłeś, odnosi się również do innego pytania, które jest również podobne: http://stackoverflow.com/questions/6900328/git-command-to-show-all-lightweight-tags-creation-dates – wegenerd

+0

Sprawdź również http://stackoverflow.com/a/22634649/6309 – VonC

Odpowiedz

15
git tag | xargs [email protected] git log --format=format:"%ai @%n" -1 @ | sort | awk '{print $4}' 
+5

Imponujący , choć trudne do zapamiętania dla zwykłego pisania. Co by było fajniej: 'tag git --sort = date' lub coś w tym stylu. –

+0

I nie działa w systemie Windows :( – Webberig

+1

Rozwiązanie w [wątku] (http://stackoverflow.com/questions/6269927/how-can-i-list-all-tags-in-my-git- repozytorium po dniu, w którym powstały) @ Wspomniane wyżej jest lepsze. 'git dla-each-ref -sort = -committerdate --format =% \ (refname: short \) refs/tag' – richsoni

20

W git 2.3.3 mogę po prostu to zrobić, aby je posortowane wg daty:

git tag --sort version:refname 

PS: dla przypomnienia, ja też odpowiedział na to samo pytanie na duplicate

+6

To robi ** nie ** wymienia je posortowane według daty.W moim repo jest tag 'testBranch-4 'był na liście po' master-10', mimo że testbranch jest starszy – sydd

+0

Cóż, ma to zrobić @sydd ... ale wygląda na to, że jest kilka [znanych błędów] (http: //thread.gmane. org/gmane.comp.version-control.git/242392/focus = 242822), ale to, co opisują, nie ma zastosowania do nazw twoich gałęzi ... nie ma pojęcia, działa na moim komputerze: P (tylko żartuję , brzmi jak błąd w samym git, czy próbowałeś z git 2.5?) – opsidao

+2

To nie działało dla mnie w wersji git 2.10.1 – cs01

5
git log --date-order --tags --simplify-by-decoration --pretty=format:"%ci %d" 
19

tylko przetestowane z git 2.8.0:

git tag --sort=committerdate 

Pełną listę nazw pól można używać, zobacz https://git-scm.com/docs/git-for-each-ref#_field_names

Dla zatwierdzać i oznaczać obiekty, specjalne pola creatordate i creator będą odpowiadać odpowiedniej dacie lub krotce z nazwą-datą-e-mailem z pola committer lub taggera w zależności od rodzaj obiektu. Są one przeznaczone do pracy z mieszanką opisów i lekkich tagów.

Pola, które mają imieniny email bieżąco krotki jako wartość (author, committer i tagger) może być z rozszerzeniem name, email i date wyodrębnić nazwie komponentu.

+3

To jest najlepszy sposób, IMO. Poza tym musisz podać 'taggerdate' zamiast' commiterdate', jeśli chcesz uzyskać porządek chronologiczny tagów. –

+0

To powinno być oznaczone jako poprawna odpowiedź – xvorsx

+0

Taggerdate nie działa dla mnie - git 2.7.4 – patch

Powiązane problemy