Bagaimana cara mendaftar semua tag beserta pesan lengkapnya di git?

360

Saya ingin git mendaftar semua tag bersama dengan penjelasan lengkap atau pesan komit. Sesuatu seperti ini sudah dekat:

git tag -n5

Ini melakukan persis apa yang saya inginkan kecuali bahwa itu hanya akan muncul hingga 5 baris pertama dari pesan tag.

Saya kira saya bisa menggunakan jumlah yang sangat besar. Berapa angka tertinggi yang bisa saya gunakan di sini? Apakah sama di setiap komputer?

UPDATE : Saya punya banyak waktu untuk memikirkan hal ini, dan sekarang saya pikir saya tidak perlu ingin menunjukkan keseluruhan dari setiap pesan jika beberapa di antaranya sangat panjang. Saya tidak benar-benar memiliki kebutuhan khusus yang mengharuskan saya untuk melihat pesan besar (selain kecenderungan saya sendiri untuk menjadi panjang lebar dalam semua yang saya tulis, termasuk pesan tag). Aku hanya tidak suka gagasan bahwa itu tidak harus menunjukkan kepadaku seluruh pesan, karena itu membuatku merasa seolah-olah menyembunyikan informasi dari saya. Tetapi terlalu banyak informasi juga bisa menjadi hal yang buruk.

still_dreaming_1
sumber
62
git tag -nmelakukannya untuk saya
Martin Berger
11
git tag -nhanya mencetak baris pertama anotasi, menurut halaman manual.
Paul Price
@INTPner, tag setuju, -l digunakan untuk mencantumkan tag dengan pola tertentu. Mengedit jawabannya.
Zubair

Jawaban:

349

Coba ini, ia akan mencantumkan semua tag bersama dengan anotasi & 9 baris pesan untuk setiap tag:

git tag -n9

bisa juga digunakan

git tag -l -n9

jika tag spesifik ingin dicantumkan:

git tag -l -n9 v3.*

(mis. perintah di atas hanya akan menampilkan tag yang dimulai dengan "v3.")

-l, --list daftar tag dengan nama yang cocok dengan pola yang diberikan (atau semua jika tidak ada pola yang diberikan). Menjalankan "git tag" tanpa argumen juga mencantumkan semua tag. Polanya adalah shell wildcard (yaitu, dicocokkan menggunakan fnmatch (3)). Beberapa pola dapat diberikan; jika ada yang cocok, tag ditampilkan.

Zubair
sumber
6
Ini hanya akan mencetak baris pertama dari setiap anotasi.
Paul Price
3
@Paul Price: hanya Anda yang memiliki anotasi, jika tidak maka akan mencetak pesan komit. Setuju ini bukan yang jawabannya.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
3
Menurut dokumentasi, -lopsinya adalah untuk memfilter suatu pola. Saya tidak melihat bagaimana itu akan membantu di sini. Apakah saya melewatkan sesuatu?
still_dreaming_1
2
@ INTPnerd ya, -lini benar-benar berlebihan di sini
Lambart
1
@ P.MyerNore Anda harus menggunakan git versi aneh atau memberikan argumen tambahan untuk melakukan sesuatu lebih dari apa yang ditanyakan pertanyaan ini. Tapi itu baik untuk mengetahui bahwa untuk situasi tertentu -l diperlukan.
still_dreaming_1
119
git tag -n99

Pendek dan manis. Ini akan mencantumkan hingga 99 baris dari setiap anotasi tag / komit pesan. Berikut ini tautan ke dokumentasi resmi untuk tag git .

Saya sekarang berpikir batasan hanya menampilkan hingga 99 baris per tag sebenarnya adalah hal yang baik karena sebagian besar waktu, jika benar-benar ada lebih dari 99 baris untuk satu tag, Anda tidak akan benar-benar ingin melihat semua sisa garis yang akan Anda? Jika Anda ingin melihat lebih dari 99 baris per tag, Anda selalu dapat meningkatkan ini ke jumlah yang lebih besar.

Maksud saya, saya kira mungkin ada situasi atau alasan tertentu untuk ingin melihat pesan tag besar, tetapi pada titik apa Anda tidak ingin melihat seluruh pesan? Kapan memiliki lebih dari 999 baris? 10.000? 1.000.000? Maksud saya adalah, biasanya masuk akal untuk memiliki batasan pada berapa banyak garis yang akan Anda lihat, dan nomor ini memungkinkan Anda untuk mengatur itu.

Karena saya membuat argumen untuk apa yang umumnya ingin Anda lihat ketika melihat tag Anda, mungkin masuk akal untuk menetapkan sesuatu seperti ini sebagai alias (dari komentar Iulian Onofrei di bawah):

git config --global alias.tags 'tag -n99'

Maksud saya, Anda tidak benar-benar ingin harus mengetik git tag -n99setiap kali Anda hanya ingin melihat tag Anda, bukan? Setelah alias itu dikonfigurasi, kapan pun Anda ingin melihat tag Anda, Anda cukup mengetikkan git tagsterminal Anda. Secara pribadi, saya lebih suka untuk mengambil langkah lebih jauh dari ini dan membuat alias bash lebih singkat untuk semua perintah saya yang biasa digunakan. Untuk tujuan itu, Anda bisa menambahkan sesuatu seperti ini ke file .bashrc Anda (berfungsi di Linux dan lingkungan serupa):

alias gtag='git tag -n99'

Lalu setiap kali Anda ingin melihat tag Anda, Anda cukup mengetik gtag. Keuntungan lain dari menyusuri alias path (baik alias git atau alias bash atau apa pun) adalah Anda sekarang sudah memiliki tempat di mana Anda dapat menambahkan penyesuaian lebih lanjut untuk bagaimana Anda secara pribadi, umumnya ingin memiliki tag Anda ditampilkan kepada Anda (seperti menyortir mereka dengan cara tertentu seperti dalam komentar saya di bawah, dll). Setelah Anda cepat menciptakan alias pertama, Anda sekarang akan menyadari betapa mudahnya membuat lebih banyak untuk hal-hal lain yang Anda sukai untuk bekerja dengan cara yang disesuaikan, seperti git log, tetapi mari simpan itu untuk pertanyaan / jawaban yang berbeda. .

still_dreaming_1
sumber
3
git config --global alias.tags 'tag -n99'
Iulian Onofrei
@IulianOnofrei, bagus, saya tidak tahu git mengizinkan Anda untuk mendefinisikan alias. Saya menyadari ini di luar topik, tetapi saya tidak bisa menolak. Inilah yang sekarang saya gunakan (ditempatkan di .bashrc Anda atau semacamnya):alias gtag='git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags | sort -V'
still_dreaming_1
25

Jawaban Mark Longair (menggunakan git show) dekat dengan apa yang diinginkan dalam pertanyaan. Namun, itu juga termasuk komit yang ditunjukkan oleh tag, bersama dengan tambalan penuh untuk komit itu. Karena komit dapat agak tidak terkait dengan tag (hanya satu komit yang berusaha ditangkap oleh tag), ini mungkin tidak diinginkan. Saya percaya yang berikut ini sedikit lebih baik:

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done
Paul Price
sumber
Acara git Mark tidak menunjukkan tambalan untuk penggunaan saya. Perintahnya menghilangkan -p atau --patch, tetapi untuk benar-benar yakin akan melewatkan diff, seseorang dapat menggunakan: --no-patch. (on git v2.7.1 / mac)
AnneTheAgile
13

Ini jauh dari cantik, tetapi Anda dapat membuat skrip atau alias yang melakukan sesuatu seperti ini:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done
Mark Longair
sumber
Apakah ada alasan untuk tidak mengganti git for-each-ref refs/tags/ --format='%(refname)'dengan git tag -l?
Shai Berger
@ShaiBerger: dalam prakteknya, saya tidak berpikir begitu - saya kira saya hanya berpikir bahwa itu git tagadalah porselen dan git for-each-refpipa ledeng, jadi output dari yang terakhir harus lebih stabil untuk skrip.
Mark Longair
10

Hanya pesan tag terakhir:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
gaRex
sumber
2
Untuk orang lain yang terjadi pada ini dari google: Jika Anda ingin menampilkan pesan dari tag tertentu: git cat-file -p <tag> | tail -n +6
Kit Peters
6

Gunakan opsi --format

git tag -l --format='%(tag) %(subject)'
Александр Туманов
sumber
2

Saya lebih suka melakukan ini pada baris perintah, tetapi jika Anda tidak keberatan dengan antarmuka web dan Anda menggunakan GitHub, Anda dapat mengunjungi https://github.com/user/repo/tagsdan mengklik "..." di sebelah setiap tag untuk menampilkan anotasinya.

Agouge
sumber