Arsitektur inti Git: tiga area (working directory, staging area, repository), area stash, model snapshot, objek blob, tree, commit, serta peran hash SHA-1 dan SHA-256 sebagai ID unik.

Di episode 1 kita memahami kenapa Git ada: menggantikan arsip manual dan VCS terpusat dengan sistem yang cepat, offline, dan menjamin integritas data. Sekarang kita bedah bagaimana Git bekerja di dalam.
Pemahaman arsitektur ini bukan teori kosong. Semua perintah yang akan kalian pakai — git add, git commit, git stash, git restore — bekerja dengan memindahkan file antar area yang berbeda. Begitu kalian paham area-areanya, perilaku setiap perintah menjadi logis dan mudah ditebak.
Setiap file dalam repository Git selalu berada di salah satu dari tiga area berikut.
Area tempat kalian mengedit file — folder proyek yang terlihat dan dibuka di editor. Perubahan yang baru dibuat di sini belum "dikenal" Git.
Area perantara yang menyimpan snapshot dari perubahan yang siap di-commit. Di sinilah kalian menyusun apa saja yang masuk ke commit berikutnya. Staging Area disebut juga Index dan direpresentasikan file index di dalam folder .git.
Area penyimpanan permanen seluruh riwayat commit — database Git di dalam folder tersembunyi .git. Setelah sebuah commit dibuat, datanya ada di sini dan menjadi bagian dari sejarah.
git status --short
M README.md
A fitur-baru.js
?? catatan.txtCara membaca status di atas:
M README.md — file berubah di working directory, belum di-stage.A fitur-baru.js — file sudah masuk staging area, siap di-commit.?? catatan.txt — file baru belum pernah dikenali Git (untracked).Perintah untuk berpindah antar area:
git add <file>git commit -m "pesan"git restore --staged <file>git restore <file>Stash adalah "lemari penyimpanan sementara" di luar ketiga area utama. Gunakan saat harus pindah konteks mendadak (misal berpindah branch) padahal pekerjaan belum selesai. Perintah git stash menyimpan perubahan sementara dan membersihkan working directory; git stash pop mengembalikannya. Detail lengkapnya akan kita bahas di episode 15.
Ini salah satu hal paling membedakan Git dari VCS lain. Subversion menyimpan delta — catatan perbedaan antar versi. Git menyimpan snapshot — kondisi lengkap seluruh file proyek pada saat commit.
Jika tidak ada file yang berubah antar dua commit, Git tidak menyimpan salinan duplikat — ia cukup menunjuk ulang ke snapshot sebelumnya. Hasilnya: mengembalikan commit lama semudah menunjuk ke snapshot, tanpa perlu "menggabungkan delta" satu per satu.
Semua data Git tersimpan sebagai objek dalam database di folder .git/objects. Ada empat tipe yang wajib kalian kenal.
Blob (Binary Large Object) adalah isi murni sebuah file — tanpa nama file dan tanpa metadata. Dua file berbeda dengan isi yang sama akan berbagi blob yang sama; ini dasar dari deduplikasi penyimpanan Git.
Tree adalah representasi sebuah direktori: daftar nama file beserta blob yang dipetakan, atau subdirektori yang direpresentasikan tree lain. Inilah yang menghubungkan blob menjadi struktur folder yang sebenarnya.
Commit adalah objek paling penting: ia menyimpan metadata — penulis, committer, timestamp, pesan — beserta pointer ke tree yang mewakili kondisi snapshot saat itu, plus pointer ke commit induk (parent). Rantai pointer inilah yang membentuk sejarah.
commit 3f2a1b0c
author Arman Dwi Pangestu <arman@kalian.com>
message feat: tambah halaman login
tree b8d4e7f1
parent 9c4a2d6eTag adalah label untuk commit tertentu, biasa dipakai menandai versi rilis (v1.2.3). Tag annotated menyimpan metadata tambahan — pesan dan penandatangan — dan menjadi objek Git sendiri, berbeda dari lightweight tag yang hanya sekadar pointer tanpa metadata. Detail di episode 20.
Setiap objek Git — blob, tree, commit, tag — diberi identitas berupa hash kriptografis dari isinya, menggunakan SHA-1 (40 karakter hex) dan kini mulai beralih ke SHA-256 (64 karakter).
Hash berfungsi ganda:
a1b2c3d).echo "selamat datang" > README.md
git hash-object README.md
f2c3d4e5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1Tip
Coba jalankan git hash-object <file> pada file yang sama dua kali — hash-nya selalu sama. Inilah prinsip deduplikasi: file identik di mana pun lokasinya hanya disimpan sekali oleh Git.
Rekap episode 2:
Di episode 3 kita mulai praktik sungguhan: menginisialisasi repository dengan git init, membaca status file dengan git status, menandai file untracked dan staged, hingga menyusun .gitignore. Kalian sudah punya fondasi yang kuat — sekarang saatnya tangan mengetik. Sampai jumpa!