TLDR tidak ditandai: komit; beranotasi: komit, penulis, tanggal, (opsional) komentar
Antony Hatchkins
Jawaban:
255
TL; DR
Perbedaan antara perintah adalah bahwa yang satu memberi Anda pesan tag sementara yang lain tidak. Tag beranotasi memiliki pesan yang dapat ditampilkan dengan git-show (1), sementara tag tanpa anotasi hanyalah penunjuk bernama untuk komit.
Lebih Lanjut Tentang Tag Ringan
Menurut dokumentasi : "Untuk membuat tag yang ringan, jangan berikan opsi -a, -s, atau -m, cukup berikan nama tag". Ada juga beberapa opsi berbeda untuk menulis pesan pada tag beranotasi:
Ketika Anda menggunakan git tag <tagname>, Git akan membuat tag pada revisi saat ini tetapi tidak akan meminta Anda untuk anotasi. Ini akan ditandai tanpa pesan (ini adalah tag yang ringan).
Saat Anda menggunakan git tag -a <tagname>, Git akan meminta Anda untuk anotasi kecuali Anda juga telah menggunakan flag -m untuk memberikan pesan.
Ketika Anda menggunakan git tag -a -m <msg> <tagname>, Git akan menandai komit dan membubuhi keterangan dengan pesan yang diberikan.
Ketika Anda menggunakan git tag -m <msg> <tagname>, Git akan berperilaku seolah-olah Anda melewati tanda -a untuk penjelasan dan menggunakan pesan yang disediakan.
Pada dasarnya, itu hanya berarti apakah Anda ingin tag memiliki anotasi dan beberapa informasi lain yang terkait dengannya atau tidak.
Apakah ada perbedaan antara tag "anotasi" dan pesan komit?
Steve Bennett
3
@SteveBennett Ya. Anotasi tag bukan pesan komit. Anda tidak dapat melihatnya dengan git-log (1); Anda perlu menggunakan git-show (1).
Todd A. Jacobs
115
Perbedaan antara tag "beranotasi" dan "ringan" melampaui pesan. Anda dapat memiliki tag beranotasi tanpa pesan ( git tag -a <tag> -m ''), tetapi tag beranotasi selalu memiliki tagger (penulis) dan tanggal .
Piotr Findeisen
1
Sama untuk ku. Tag versi biasanya memiliki pesan yang sangat tidak berguna (bisakah itu mengatakan lebih dari namanya? Untuk apa?) Sayangnya, jawaban ini tidak menyebutkan perbedaan ini.
Piotr Findeisen
44
Hal penting lain yang perlu diperhatikan adalah ketika Anda mendorong tag Anda ke repositori jarak jauh menggunakan git push --follow-tags, hanya tag beranotasi yang akan didorong.
Xatoo
209
Dorong tag beranotasi, pertahankan lokal yang ringan
man git-tag mengatakan:
Tag beranotasi dimaksudkan untuk rilis sementara tag ringan dimaksudkan untuk label objek pribadi atau sementara.
Dan perilaku tertentu memang membedakan mereka dengan cara-cara yang berguna misalnya rekomendasi ini:
tag beranotasi dapat berisi pesan, pembuat, dan tanggal yang berbeda dari komit yang dituju. Jadi, Anda bisa menggunakannya untuk menjelaskan rilis tanpa membuat komit rilis.
Tag ringan tidak memiliki informasi tambahan itu, dan tidak memerlukannya, karena Anda hanya akan menggunakannya sendiri untuk dikembangkan.
Ini jauh lebih jelas daripada jawaban yang saat ini diterima. Terima kasih.
Reece
43
Perbedaan besar dijelaskan dengan sempurna di sini .
Pada dasarnya, tag ringan hanyalah petunjuk untuk komit tertentu. Tidak ada informasi lebih lanjut yang disimpan ; di sisi lain, tag beranotasi adalah objek biasa , yang memiliki penulis dan tanggal dan dapat dirujuk karena mereka memiliki kunci SHA mereka sendiri.
Jika mengetahui siapa yang menandai apa dan kapan relevan bagi Anda, maka gunakan tag yang dianotasi. Jika Anda hanya ingin menandai titik tertentu dalam pengembangan Anda , tidak peduli siapa dan kapan melakukannya, maka tag ringan cukup baik.
Biasanya Anda akan mencari tag beranotasi, tetapi itu sepenuhnya tergantung pada master Git dari proyek tersebut.
Jawaban:
TL; DR
Perbedaan antara perintah adalah bahwa yang satu memberi Anda pesan tag sementara yang lain tidak. Tag beranotasi memiliki pesan yang dapat ditampilkan dengan git-show (1), sementara tag tanpa anotasi hanyalah penunjuk bernama untuk komit.
Lebih Lanjut Tentang Tag Ringan
Menurut dokumentasi : "Untuk membuat tag yang ringan, jangan berikan opsi -a, -s, atau -m, cukup berikan nama tag". Ada juga beberapa opsi berbeda untuk menulis pesan pada tag beranotasi:
git tag <tagname>
, Git akan membuat tag pada revisi saat ini tetapi tidak akan meminta Anda untuk anotasi. Ini akan ditandai tanpa pesan (ini adalah tag yang ringan).git tag -a <tagname>
, Git akan meminta Anda untuk anotasi kecuali Anda juga telah menggunakan flag -m untuk memberikan pesan.git tag -a -m <msg> <tagname>
, Git akan menandai komit dan membubuhi keterangan dengan pesan yang diberikan.git tag -m <msg> <tagname>
, Git akan berperilaku seolah-olah Anda melewati tanda -a untuk penjelasan dan menggunakan pesan yang disediakan.Pada dasarnya, itu hanya berarti apakah Anda ingin tag memiliki anotasi dan beberapa informasi lain yang terkait dengannya atau tidak.
sumber
git tag -a <tag> -m ''
), tetapi tag beranotasi selalu memiliki tagger (penulis) dan tanggal .git push --follow-tags
, hanya tag beranotasi yang akan didorong.Dorong tag beranotasi, pertahankan lokal yang ringan
man git-tag
mengatakan:Dan perilaku tertentu memang membedakan mereka dengan cara-cara yang berguna misalnya rekomendasi ini:
tag beranotasi dapat berisi pesan, pembuat, dan tanggal yang berbeda dari komit yang dituju. Jadi, Anda bisa menggunakannya untuk menjelaskan rilis tanpa membuat komit rilis.
Tag ringan tidak memiliki informasi tambahan itu, dan tidak memerlukannya, karena Anda hanya akan menggunakannya sendiri untuk dikembangkan.
git describe
tanpa opsi baris perintah hanya melihat tag beranotasiPerbedaan internal
kedua tag ringan dan beranotasi adalah file di bawahnya
.git/refs/tags
yang berisi SHA-1untuk tag ringan, SHA-1 menunjuk langsung ke komit:
mencetak sama dengan HEA's SHA-1.
Jadi tidak heran mereka tidak dapat mengandung metadata lainnya.
tag beranotasi mengarah ke objek tag dalam database objek.
berisi SHA dari objek tag beranotasi:
dan kemudian kita bisa mendapatkan kontennya dengan:
output sampel:
Dan ini caranya mengandung metadata tambahan. Seperti yang bisa kita lihat dari output, bidang metadata adalah:
Analisis format yang lebih terperinci terdapat di: Apa format objek tag git dan bagaimana cara menghitung SHA-nya?
Bonus
Tentukan apakah tag dianotasi:
Keluaran
commit
untuk yang ringan, karena tidak ada objek tag, itu menunjuk langsung ke komittag
untuk dijelaskan, karena ada objek tag dalam kasus ituDaftar hanya tag ringan: Bagaimana saya bisa mendaftar semua tag ringan?
sumber
Perbedaan besar dijelaskan dengan sempurna di sini .
Pada dasarnya, tag ringan hanyalah petunjuk untuk komit tertentu. Tidak ada informasi lebih lanjut yang disimpan ; di sisi lain, tag beranotasi adalah objek biasa , yang memiliki penulis dan tanggal dan dapat dirujuk karena mereka memiliki kunci SHA mereka sendiri.
Jika mengetahui siapa yang menandai apa dan kapan relevan bagi Anda, maka gunakan tag yang dianotasi. Jika Anda hanya ingin menandai titik tertentu dalam pengembangan Anda , tidak peduli siapa dan kapan melakukannya, maka tag ringan cukup baik.
Biasanya Anda akan mencari tag beranotasi, tetapi itu sepenuhnya tergantung pada master Git dari proyek tersebut.
sumber