Bagaimana saya bisa mendaftar semua tag di repositori Git saya pada tanggal dibuat?

128

Saya perlu beberapa cara untuk mendaftar semua tag di sistem saya pada tanggal dibuat tetapi saya tidak yakin apakah saya bisa mendapatkan data itu melalui git-log. Ide ide?

Jon Ursenbach
sumber
2
Apakah maksud Anda ingin mendapatkan daftar semua tag sesuai tanggal pembuatan yang ada?
lithuak
3
FYI (1.) Pertanyaan ini untuk mencantumkan tag ANNOTATED berdasarkan tanggal. (2.) Untuk mendaftarkan tag LIGHTWEIGHT berdasarkan tanggal, buka di sini . (3.) Untuk pengingat yang bermanfaat tentang apa perbedaan antara tag Git yang ringan dan beranotasi, buka di sini .
Trevor Boyd Smith
@ TrevorBoydSmith: Itu tidak benar. Perbedaannya adalah bahwa (2) mencantumkan semua tag berdasarkan tanggal komit dari tag yang ditandai , sedangkan halaman ini memberikan solusi yang mengurutkan berdasarkan tanggal yang ditandai (meskipun hanya untuk tag beranotasi, karena git tidak menyimpan tanggal yang ditandai untuk tag ringan).
David P

Jawaban:

174

Penyortiran menurut tanggal pembuatan tag berfungsi dengan tag beranotasi dan ringan:

git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
Josh Lee
sumber
12
Luar biasa. git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tagsmelakukan apa yang saya butuhkan. Terima kasih!
Jon Ursenbach
21
Solusi oleh @DrorCohen yang berfungsi untuk tag ringan: stackoverflow.com/questions/6900328/… . Menempel di sini untuk referensi mudah: git log --tags --simplify-by-decoration --pretty = "format:% ai% d"
Gilead
5
Dapat digunakan %(contents)untuk menambahkan anotasi jika diperlukan, misalnyagit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
Tim Diggins
7
Atau bahkan sedikit lebih bersih:git for-each-ref --sort=taggerdate --format '%(tag)'
Baris Wanschers
4
--sort=creatordateberfungsi untuk tag beranotasi dan tidak beranotasi, tetapi --sort=taggerdatetampaknya hanya berfungsi dengan tag beranotasi. diuji menggunakangit version 2.16.3
austinheiman
56

Git 2.8 (Maret 2016) mendokumentasikan opsi lain yang berasal dari git 1.4.4 (Oct2006) .
Lihat komit e914ef0 (05 Jan 2016) oleh Eric Wong ( ele828) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 108cb77 , 20 Jan 2016)

Lihat yang baru Documentation/git-for-each-ref.txt

Untuk objek komit dan tag, bidang khusus creatordatedan creator akan sesuai dengan tanggal yang sesuai atau nama-email-tanggal tupel dari committeratau taggerbidang tergantung pada jenis objek.
Ini dimaksudkan untuk bekerja pada campuran tag beranotasi dan ringan .

Jadi menggunakan creatordatekarya dengan tag:

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }' 

Atau:

git tag --sort=-creatordate 

Seperti yang saya jelaskan di " Bagaimana cara mengurutkan git tag berdasarkan urutan string versi dari form rc-XYZW? ", Anda dapat menambahkan urutan sortir ke git tag(sejak Git 2.0 Juni 2014).

Urutan semacam itu termasuk sebagai taggerdate nama bidang (tercantum dalam git for-each-ref) . Itu memungkinkan untuk (disebutkan oleh DarVar di bawah ) Sebagai contoh, dalam repo itu akan mencantumkan tag terakhir:git tag --sort=taggerdate
git/gitv2.10.0

v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0

Pesanan default tidak akan ( 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
VONC
sumber
Terima kasih banyak. Saya bertanya-tanya mengapa beberapa kencan kosong. Saya sudah mencurigai tag ringan. Saya senang saya tidak perlu membuat ulang tag terima kasih creatordate!
exhuma
35
git log --tags --simplify-by-decoration --pretty="format:%ci %d"

Juga hasil yang bagus dari (tanpa bidang tanggal):

git log --tags --decorate --simplify-by-decoration --oneline

Untuk melihat riwayat lengkap dengan dependensi dan komitmen linear bergaris (hanya peristiwa penting, seperti penandaan dan pencabangan / penggabungan):

git log --graph --decorate --simplify-by-decoration --oneline --all
gavenkoa
sumber
Untuk orang-orang malas: git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"dan itu bekerja paling baik untuk saya.
Mateusz
1
Perhatikan bahwa ini dipesan berdasarkan tanggal komit, bukan tanggal tag dibuat. Jawaban teratas (saat ini) dari Josh Lee memesan pada tanggal pembuatan tag.
Nathanial Woolls
13
git tag --sort=-taggerdate

Menurut halaman manual, "Awalan - untuk mengurutkan dalam urutan nilai."

git tagmenggunakan kunci penyortiran yang sama dengan git-for-each-ref, di mana kunci didokumentasikan.

Zamicol
sumber
1
Ini mungkin yang paling benar berdasarkan pertanyaan. Berikut ini tautan ke dokumen yang menguraikan bidang semacam ini: git-scm.com/docs/git-for-each-ref
prasanthv
Respons ini tidak memperhitungkan tag ringan akun karena tag "tanggal tag" kosong. Respons lain dengan "menciptakan" lebih akurat.
morhook
13

Satu baris ini menampilkan tanggal & tag tanpa keributan.

git tag --format='%(creatordate:short)%09%(refname:strip=2)'

Keluaran:

2015-04-01  storaged-2.0.0
2015-06-11  storaged-2.1.0
2015-08-06  storaged-2.1.1
...

Jika Anda tidak suka bagaimana tag diurutkan secara default, Anda dapat mengurutkan berdasarkan tanggal dengan opsi --sort=creatordate, misalnya. Lihat jawaban VonC untuk lebih jelasnya.

elboulangero
sumber
Apakah metode yang bagus ini terikat untuk mengurutkan mereka berdasarkan tanggal? naik? menurun?
Motti Shneor
11

Agar tag beranotasi dan tag ringan disortir sekaligus, berdasarkan tanggal komit, saya menggunakan:

git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
  sort -n | awk '{ print $4, $3; }' 

Perintah ini akan mencantumkan setiap tag dan id objek komit terkait, dalam urutan kronologis.

Yann Droneaud
sumber
Dikacaukan sedikit. ... Dalam tag beranotasi, 'committerdate' kosong sedangkan di tag ringan 'taggerdate' kosong. Jadi sebagai solusinya '* committerdate' memberitahu Git untuk meng-backreferensi tanggal dari objek commit asli ketika ringan. ...
sana
Menggunakan 'creatordate' sebagai gantinya harus secara efektif melakukan hal yang sama.
ingyhere
7

Dengan Git version 2.10.0.windows.1

git tag --sort=taggerdate

DarVar
sumber
5

Berikut ini bergantung pada komit, jadi tidak masalah jika memiliki informasi tanggal dengan komit:

git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac

Jawaban di atas oleh Josh Lee, bergantung pada tanggal tag untuk mendapatkan pesanan yang benar.

Andrew McGlashan
sumber
Tidak yakin apa perintah trailing tac- mungkin mengubahnya more. Pokoknya perintah Anda bekerja dengan baik - terima kasih!
David H
3

Berdasarkan metode yang disebutkan sebelumnya, saya juga ingin melihat tanggal tag aktual pada daftar, dan versi yang digunakan adalah:

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'
Ville
sumber