Menerbitkan rilis berarti menutup semua celah sekaligus: seluruh commit harus sampai ke pusat, artefak yang dibagikan pengguna harus dibungkus dari keadaan yang tepat, catatan rilis harus terbaca tanpa membuka terminal, dan hasil akhirnya harus terbukti utuh dari luar. Bagian ini menuntaskan keempatnya — lalu menutup course dengan ringkasan tujuh proyek yang barusan kita jalani.

Mendorong Rilis ke Pusat #

Dua langkah terakhir dari pusat: commit changelog yang belum terkirim, dan penegasan bahwa tag di pusat sudah benar:

bash
git push origin main
git push origin v1.0.0

Output yang Dihasilkan (perintah git push origin main):

text
To ../katalog-film-pusat.git
   37b21f8..4d9fc68  main -> main

Output yang Dihasilkan (perintah git push origin v1.0.0):

text
Everything up-to-date

Push main mengirim rentang 37b21f8..4d9fc68 — commit changelog menyusul riwayat yang sudah ada di pusat. Push tag menjawab Everything up-to-date: tag sudah diperbarui oleh push terpaksa di Bagian 3, dan kini salinan pusat identik dengan lokal. Peta akhir pusat terbaca dari luar lewat ls-remote:

bash
git ls-remote origin

Output yang Dihasilkan:

text
4d9fc687a8e5f21807bfd3d06ee6b01aba8ebfae	HEAD
4d9fc687a8e5f21807bfd3d06ee6b01aba8ebfae	refs/heads/main
8c4b52ab4123c9eafcd925613b070327e3e3dd9b	refs/tags/v1.0.0
4d9fc687a8e5f21807bfd3d06ee6b01aba8ebfae	refs/tags/v1.0.0^{}

Empat baris itu adalah seluruh isi pusat: HEAD menunjuk main, refs/heads/main berdiri di commit changelog, refs/tags/v1.0.0 adalah objek tag itu sendiri, dan baris ^{} terakhir adalah hasil pengupasan Git — commit yang ditunjuk tag. Rilis lengkap di pusat.

Membungkus Artefak dari Tag #

Pengguna rilis tidak selalu ingin meng-clone repository berikut seluruh riwayatnya — sebagian hanya butuh isi proyek pada versi tertentu. Untuk itu ada git archive: perintah yang mengekspor isi pohon pada satu titik riwayat menjadi berkas terkompresi, tanpa direktori .git sama sekali:

bash
git archive --format=tar.gz --output=katalog-film-1.0.0.tar.gz v1.0.0
ls -lh katalog-film-1.0.0.tar.gz
tar -tzf katalog-film-1.0.0.tar.gz

Output yang Dihasilkan (perintah ls -lh katalog-film-1.0.0.tar.gz):

text
-rw-rw-r-- 1 z z 937 Oct 13 10:40 katalog-film-1.0.0.tar.gz

Output yang Dihasilkan (perintah tar -tzf katalog-film-1.0.0.tar.gz):

text
CHANGELOG.md
README.md
VERSION
src/
src/app.txt

Mari bedah tiga argumennya: --format=tar.gz memilih format terkompresi, --output menentukan nama berkas hasil, dan v1.0.0 adalah titik riwayat yang diekspor — pohon persis seperti yang dibekukan tag, lengkap dengan CHANGELOG.md hasil tag ulang Bagian 3. Daftar isi dari tar -tzf membuktikannya: empat berkas proyek tampil, .git tidak ada, dan ukurannya cuma 937 byte untuk proyek sekecil ini. Sintaks lengkapnya terdokumentasi di dokumentasi git archive .

Menyusun Catatan Rilis #

Catatan rilis (release notes) adalah teks yang menyambut pengguna di halaman rilis. Bahan utamanya sudah kita tulis dua kali: pesan tag menjadi judul dan ringkasan, changelog menjadi rincian perubahan. Keduanya bisa dibaca kembali tanpa membuka editor:

bash
git tag -l -n10 v1.0.0

Output yang Dihasilkan:

text
v1.0.0          Katalog Film 1.0.0
    
    Fitur: daftar film, pencarian. Perbaikan: judul.

Opsi -n10 meminta git tag -l mencetak pesan tag sampai sepuluh baris — di sini terlihat dua paragraf pesan rilis dari Bagian 2. Pada platform hosting, teks ini tinggal ditempelkan: fitur Releases di GitHub dan GitLab menggabungkan tag, catatan rilis, dan artefak dalam satu halaman publik — pengguna mengunduh katalog-film-1.0.0.tar.gz dari sana tanpa menyentuh terminal. Alur lengkapnya dibedah di Release dan Tags .

Verifikasi Ujung ke Ujung #

Satu ujian terakhir menutup rilis: anggap kita adalah pengguna yang baru datang, lalu hidupkan repository dari pusat ke folder bersih:

bash
git clone ../katalog-film-pusat.git verifikasi
git -C verifikasi describe --tags

Output yang Dihasilkan (perintah git clone ../katalog-film-pusat.git verifikasi):

text
Cloning into 'verifikasi'...
done.

Output yang Dihasilkan (perintah git -C verifikasi describe --tags):

text
v1.0.0

git describe --tags menjawab pertanyaan “commit ini paling dekat dengan tag mana”: Git mencari tag terdekat yang bisa dicapai dari HEAD, lalu melaporkan namanya. Keluaran v1.0.0 polos — tanpa akhiran — berarti HEAD clone jatuh tepat pada tag; bila HEAD berada beberapa commit setelahnya, keluarannya berbentuk v1.0.0-3-g<hash>. Perintah ini favorit skrip rilis, dan penamaan versi otomatis darinya dibahas di dokumentasi git describe . Riwayatnya ikut utuh:

bash
git -C verifikasi log --oneline -3

Output yang Dihasilkan:

text
4d9fc68 docs: tambah CHANGELOG untuk 1.0.0
37b21f8 chore: kunci versi 1.0.0
028e7df fix: perbaiki typo judul film

Delapan commit, tag, changelog, artefak — semuanya terbukti sampai. Isi aplikasi yang terkirim layak dilihat sekali lagi:

bash
cat src/app.txt

Output yang Dihasilkan:

text
Katalog Film
============

Catatan film favorit untuk ditonton akhir pekan.

## Daftar Film

1. Laskar Pelangi (2008)
2. Dilan 1990 (2018)
3. Habibie & Ainun (2012)

## Pencarian

cari(kata_kunci):
    cocok = judul yang memuat kata_kunci
    kembalikan cocok

Hasil uji:
cari("dilan") → Dilan 1990 (2018)

Header, daftar film dengan judul yang sudah diperbaiki, dan seksi pencarian — persis keadaan yang dibekukan v1.0.0, dan persis isi src/app.txt yang menyertai halaman proyek ini. Rilis v1.0.0 selesai.

Ringkasan Tujuh Proyek #

Dengan rilis ini, course menutup babak latihannya. Tujuh proyek yang kita jalani membentuk satu progression utuh:

ProyekKonsep utama yang dilatih
Proyek 01: Repository Pribadiinit, commit rutin, branch, merge, dan tag pertama
Proyek 02: Workflow Feature Branchsatu branch per fitur, merge terjadwal, riwayat rapi
Proyek 03: Kolaborasi Melalui Remoteremote bare, push/pull bergiliran, konflik diselesaikan
Proyek 04: Simulasi Code Reviewfork, review bertahap, perbaikan atas feedback, merge
Proyek 05: Pemulihan Riwayatreflog, reset, branch bangkit, mirror dan bundle
Proyek 06: Otomasi Git Hooksvalidasi pesan commit dan pemeriksaan otomatis
Proyek 07: Simulasi ReleaseSemVer, annotated tag, changelog, artefak, verifikasi rilis

Dari baris pertama sampai terakhir polanya konsisten: setiap proyek memakai konsep proyek sebelumnya dan menambah satu kompetensi baru — repository pribadi tumbuh menjadi workflow, workflow bertemu orang lain, hasil kerja direview, kehilangan dipulihkan, kualitas dijaga otomatis, dan semuanya dikemas menjadi rilis bernomor.

Apa Setelah Ini #

Perjalanan course selesai, tapi Git lebih luas dari tujuh proyek ini. Tiga tempat lanjutan terdekat: Referensi untuk contekan perintah, Lampiran untuk menyiapkan SSH, GPG, dan platform, serta Sumber Belajar Lanjutan untuk bacaan berikutnya. git describe dan git archive yang barusan terpakai belum punya chapter teorinya sendiri — sama seperti git bisect, git rerere, dan git bundle tingkat lanjut — sehingga kelimanya kandidat pendalaman yang pas setelah latihan ini.

Rilis pertama selalu yang paling berarti: kita kini tahu persis apa yang terjadi di balik nama v1.0.0 — fitur mana yang masuk, mengapa angkanya begitu, di commit mana ia dibekukan, bagaimana catatannya disusun, dan bagaimana pembuktiannya bekerja. Rilis kedua tinggal mengulang pola dengan isi baru, dan setiap rilis berikutnya akan terasa seperti ritual yang sudah dikenal.