Saya memiliki proyek yang menggunakan git dan telah menandai semua rilis dengan sebuah tag.
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
Tujuan saya adalah untuk membuat daftar rilis dan tanggal rilis di antarmuka web (tag / tanggal komitmen = tanggal rilis). Saat ini kami mencantumkan semua rilis dengan menggunakan git tag
.
Bagaimana saya bisa mendapatkan waktu dan tanggal kapan tag dibuat (atau komit yang ditunjukkannya)?
Jawaban:
Gunakan
--format
argumen untukgit log
:sumber
git log -1 --format=%ai v0.2.3
,.--format=%aI
(kapital "I")git log -1 --format=%ai MY_TAG_NAME | cat
nonaktifkan tampilan halamangit log
untuk menunjukkan hanya satu komit, yang berkaitan dengan tag. Perilaku default adalah untuk menampilkan semua komit dari yang ditentukan kembali ke komit pertama di reposotory.Ini selalu berhasil untuk saya:
Lihat bagian "PRETTY FORMATS" di halaman manual git-log untuk mengetahui detail dari string format jika Anda menginginkan format tanggal yang berbeda.
sumber
taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'
(perhatikan tanda kutip tunggal, BUKAN tanda kutip ganda) di bagian [alias] file .gitconfig Anda, dan sekarang Anda memiliki perintah git taglog :)Satu opsi lagi:
git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"
Lihat https://git-scm.com/docs/git-for-each-ref#_field_names untuk opsi format
%(creatordate)
memberikan tanggal komit yang ditunjuk, untuk melihat tanggal tag dibuat saat digunakan%(taggerdate)
Anda dapat memasukkan cangkang secara langsung:
$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" "refs/tags/*" ref='v1.10' dt='1483807817' ref='v1.11' dt='1483905854' ref='v1.12.0' dt='1483974797' ref='v1.12.1' dt='1484015966' ref='v1.13' dt='1484766542' ref='v1.2' dt='1483414377' ref='v1.3' dt='1483415058' ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'. ref='v1.3.1' dt='1483487085' ref='v1.4' dt='1483730146' ref='v1.9' dt='1483802985'
sumber
git for-each-ref --format="%(taggerdate:unix)" refs/tags
atau sebagai substring digit for-each-ref --format="%(taggerdate:raw)" refs/tags
git tag --format "%(refname:short) %(creatordate:short)"
Perhatikan bahwa kedua solusi di atas memberi Anda tanggal komit, yang bisa sangat berbeda dari saat komit itu diberi tag untuk rilis. Untuk mendapatkan tanggal dari tag itu sendiri, Anda harus menemukan tag itu sendiri
rev-parse
, membacanya dengancat-file
, dan kemudian menguraikannya. Pipa kecil:git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
sumber
Tidak ada opsi sederhana dalam perintah git tag untuk melakukan ini. Saya merasa paling nyaman untuk dijalankan
untuk mendaftar semua komit termasuk tag jika ada. Untuk mendaftar hanya komit yang diberi tag, gunakan
Untuk penggunaan detail
sumber
seseorang dapat menggunakan
gawk
(bukanawk
) untuk mengonversi tanggal di baris "pemberi tag" menjadi sesuatu yang dapat dibaca manusia:jika ada yang tidak suka
gawk
makadate
dapat digunakan untuk mengonversi waktu unix:dan contoh (
dnsmasq
git repo):sumber
dnsmasq
git repo, misalnya:$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }'
Wed May 18 16:52:12 CEST 2016
Semua jawaban di sini bagus dan dalam gaya git yang tepat. Tapi saya membutuhkan tag, tanggal dan pesannya dan hanya 10 tag terakhir. Jadi saya melakukannya dengan cara yang sangat mudah. Tetapi simpan sebagai fungsi shell atau skrip dan itu menjadi satu baris.
sumber