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?
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?
Jawaban:
Penyortiran menurut tanggal pembuatan tag berfungsi dengan tag beranotasi dan ringan:
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tagsmelakukan apa yang saya butuhkan. Terima kasih!
%(contents)untuk menambahkan anotasi jika diperlukan, misalnyagit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
git for-each-ref --sort=taggerdate --format '%(tag)'
--sort=creatordateberfungsi untuk tag beranotasi dan tidak beranotasi, tetapi --sort=taggerdatetampaknya hanya berfungsi dengan tag beranotasi. diuji menggunakangit version 2.16.3
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
creatordatedancreatorakan sesuai dengan tanggal yang sesuai atau nama-email-tanggal tupel daricommitteratautaggerbidang 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
creatordate!
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
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"dan itu bekerja paling baik untuk saya.
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.
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.
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.
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.
tac- mungkin mengubahnya more. Pokoknya perintah Anda bekerja dengan baik - terima kasih!
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 }'