Tag beranotasi

Tag beranotasi beserta metadata penandanya dan pengenalan penandatanganan GPG.

Daftar isi

Tag beranotasi (annotated tag) adalah bentuk tag yang menyimpan dirinya sebagai objek tersendiri di dalam basis data Git, lengkap dengan nama penanda, waktu, dan pesan. Bentuk inilah yang direkomendasikan untuk tag rilis, karena keterangan rilis perlu tersimpan bersama penandanya, bukan hanya di catatan tim. Topik ini membahas pembuatan tag beranotasi, isi objeknya, perbandingannya dengan tag ringan, dan pengenalan penandatanganan.

Membuat tag beranotasi#

Opsi -a membuat tag beranotasi, dan opsi -m menyertakan pesannya sama seperti pada commit.

bash
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"
bash
rm -rf /tmp/lab-tag-a
mkdir /tmp/lab-tag-a
cd /tmp/lab-tag-a
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "Aplikasi.\n" > app.txt
git add app.txt
git commit -m "Versi awal"
printf "Aplikasi.\nLaporan siap.\n" > app.txt
git commit -am "Fitur laporan"
git tag -a v1.0.0 -m "Rilis 1.0.0: fitur laporan siap dipakai"
git tag -n
text Keluaran
Initialized empty Git repository in /tmp/lab-tag-a/.git/
[main (root-commit) c4e4710] Versi awal
 1 file changed, 1 insertion(+)
 create mode 100644 app.txt
[main 488952e] Fitur laporan
 1 file changed, 1 insertion(+)
v1.0.0          Rilis 1.0.0: fitur laporan siap dipakai

Keluaran git tag -n menampilkan pesan tag di samping namanya, dan itulah perbedaan yang paling terasa pada daftar tag: tag ringan menampilkan baris kosong pada kolom pesan karena memang tidak menyimpannya. Apabila -m ditiadakan, Git membuka editor pesan sebagaimana pada commit, sehingga pesan yang panjang pun nyaman ditulis.

Isi objek tag#

Tag beranotasi tersimpan sebagai objek tag dengan hash miliknya sendiri, sehingga hash yang disimpan penunjuk refs/tags/v1.0.0 bukan lagi hash commit, melainkan hash objek tag yang menunjuk commit itu. Isi objeknya dapat dilihat melalui git show.

bash
git show v1.0.0 --no-patch
text Keluaran
tag v1.0.0
Tagger: Budi <[email protected]>
Date:   Sun Nov 1 09:00:00 2026 +0700

Rilis 1.0.0: fitur laporan siap dipakai

commit 488952e502d856496c5948a671109cb350a0a85b
Author: Budi <[email protected]>
Date:   Sun Nov 1 09:00:00 2026 +0700

    Fitur laporan

Keluaran ini memuat dua lapisan: objek tag dengan penandanya dan waktunya di bagian atas, kemudian commit yang ditunjuknya di bagian bawah. Identitas penanda tag mengikuti konfigurasi user.name dan user.email yang sama dengan commit, dan waktunya adalah waktu penandaan dilakukan.

Kedua hash dapat dilihat berdampingan untuk memastikan lapisannya.

bash
cat .git/refs/tags/v1.0.0
git show --no-patch --format="%H" v1.0.0
text Keluaran
5000e72944800d8cdce9d4119d2ce4cd0856b36c
tag v1.0.0
Tagger: Budi <[email protected]>

Rilis 1.0.0: fitur laporan siap dipakai
488952e502d856496c5948a671109cb350a0a85b

Hash pertama milik objek tag, sedangkan hash kedua milik commit yang diperoleh setelah Git mengikuti penunjuk tag sampai commitnya. Pada tag ringan kedua hash itu justru sama, dan perbedaan inilah yang membuat tag beranotasi dapat menyimpan metadata tanpa mengubah commit yang ditandainya.

Kapan memakai bentuk mana#

Kedua bentuk tag memenuhi kebutuhan yang berbeda, dan tabel berikut merangkum pemilihan yang lazim.

AspekTag ringanTag beranotasi
Penyimpananberkas penunjuk sajaobjek tag tersendiri
Penanda, waktu, pesantidak adaada dan tersimpan
Cocok untukpenanda sementara milik pribaditag rilis dan penanda publik

Rekomendasi umumnya lurus: gunakan tag beranotasi untuk penanda yang akan dilihat orang lain, karena penanda dan pesannya ikut tersalin bersama repository, dan pakai tag ringan untuk penanda sementara yang hanya penting bagi diri sendiri.

Pengenalan penandatanganan#

Tag beranotasi dapat ditandatangani dengan GPG melalui opsi -s menggantikan -a, sehingga identitas penandanya dapat diverifikasi, bukan sekadar dibaca. Pemverifikasi dilakukan dengan git tag -v nama-tag yang memeriksa tanda tangan terhadap kunci publik penandanya.

bash
# tidak-dijalankan
# penandatanganan memerlukan kunci GPG yang telah disiapkan pada mesin masing-masing
git tag -s v1.1.0 -m "Rilis 1.1.0"
git tag -v v1.1.0

Penandatanganan menambah satu jaminan di atas metadata: keterangan bahwa tag itu benar-benar dibuat pemegang kunci tersebut. Proyek yang menyalurkan rilisnya luas memakai fitur ini, dan kuncinya disiapkan sekali per mesin pengembang. Untuk memulai, tag beranotasi biasa sudah memenuhi kebutuhan tim yang tidak menuntut verifikasi kriptografi.

Ringkasan#

  • Tag beranotasi tersimpan sebagai objek tag berisi penanda, waktu, dan pesan, dengan opsi -a dan -m untuk membuatnya.
  • Hash pada penunjuk tag beranotasi milik objek tag, sedangkan hash milik commit muncul setelah Git mengikuti penunjuknya.
  • Tag beranotasi direkomendasikan untuk penanda publik seperti rilis, dan tag ringan untuk penanda sementara pribadi.
  • Opsi -s menandatangani tag dengan GPG dan -v memverifikasinya, dengan kunci yang disiapkan pada mesin masing-masing.

Referensi#