Setiap proyek berubah setiap hari: paragraf laporan ditambah, fungsi program diperbaiki, berkas konfigurasi disesuaikan. Semakin sering berubah, semakin sulit menjawab tiga pertanyaan sederhana: versi mana yang terbaru, apa saja yang berbeda dari versi kemarin, dan bagaimana cara kembali ke versi yang kemarin masih benar. Version control adalah disiplin yang menjawab ketiganya dengan mencatat setiap perubahan secara terstruktur ke dalam satu riwayat. Pada chapter ini kita membahas definisi version control, alasan dibutuhkannya, dan tiga kategori sistem yang pernah populer — fondasi yang membuat semua perintah Git pada section berikutnya terasa logis, bukan hafalan.

Apa itu Version Control #

Version control adalah sistem yang mencatat perubahan pada satu berkas atau sekumpulan berkas dari waktu ke waktu, sehingga kita dapat memanggil kembali versi tertentu di kemudian hari. Definisi ini juga dipakai dokumentasi resmi Git di git-scm.com/about/version-control . Setiap catatan menyimpan empat hal sekaligus: apa yang berubah, siapa yang mengubah, kapan perubahan dilakukan, dan mengapa perubahan itu dilakukan.

Kata versi di sini berarti keadaan berkas pada satu titik waktu. Ketika kita “memanggil kembali” sebuah versi, sistem menulis ulang isi berkas persis seperti keadaan terpilih tersebut, lengkap dengan seluruh berkas lain pada titik waktu itu. Kemampuan inilah yang mengubah pengelolaan berkas dari mengandalkan ingatan menjadi mengandalkan catatan.

Mengapa Version Control Dibutuhkan #

Untuk proyek kecil yang hanya disentuh satu orang, menyalin berkas secara manual masih terasa bisa dijalankan. Kesulitan muncul ketika jumlah berkas membengkak, revisi datang setiap hari, dan lebih dari satu orang menyunting proyek yang sama. Pada titik itu, ingatan manusia tidak lagi cukup, sedangkan riwayat perubahan tetap dibutuhkan untuk memeriksa dan memperbaiki pekerjaan.

Version control memberi manfaat praktis berikut dalam pekerjaan sehari-hari:

  • Riwayat lengkap — setiap perubahan tercatat beserta penjelasan dan waktunya.
  • Kembali ke versi mana pun — keadaan proyek pada titik waktu tertentu dapat dipulihkan kapan saja.
  • Kolaborasi tanpa tabrakan — perubahan dari banyak orang dapat digabung dengan terkontrol, bukan saling menimpa.
  • Keberanian bereksperimen — percabangan (branch) memungkinkan mencoba ide baru tanpa mengganggu versi stabil.
  • Jejak audit — kita selalu bisa menjawab siapa mengubah apa dan kapan.
  • Dokumentasi keputusan — pesan pada setiap perubahan menjelaskan alasan di baliknya.

Tiga Kategori Sistem Version Control #

Sistem version control dibedakan oleh satu pertanyaan kunci: di mana riwayat perubahan disimpan. Jawabannya mengelompokkan sistem menjadi tiga kategori.

Sistem Lokal #

Sistem lokal menyimpan riwayat di satu database pada komputer yang sama dengan berkasnya. Contoh klasiknya adalah RCS, yang menyimpan versi berkas dalam berkas terpisah. Sistem ini sederhana, tetapi riwayatnya terikat pada satu mesin — komputer hilang berarti riwayat ikut hilang.

Sistem Terpusat #

Sistem terpusat (centralized version control) menempatkan riwayat pada satu server, sementara klien hanya memegang berkas kerja terbaru. Contohnya CVS dan Subversion. Kelebihannya, semua orang tahu di mana versi terbaru berada. Kelemahannya, server menjadi titik tunggal kegagalan dan hampir semua operasi riwayat membutuhkan jaringan.

Sistem Terdistribusi #

Sistem terdistribusi (distributed version control) memberi setiap orang salinan repositori yang lengkap beserta seluruh riwayatnya. Contohnya Git dan Mercurial. Salinan mana pun dapat saling bertukar perubahan secara langsung, dan tidak ada satu mesin yang wajib hidup agar pekerjaan berjalan.

KategoriLetak riwayatContohKeterbatasan utama
LokalDatabase di satu komputerRCSRiwayat terikat pada satu mesin
TerpusatSatu server khususCVS, SubversionServer mati menghentikan pekerjaan; butuh jaringan
TerdistribusiSetiap salinan repositoriGit, MercurialButuh kesepakatan titik sinkronisasi bersama

Git termasuk kategori terdistribusi; kita bedah artinya pada chapter Distributed Version Control . Sebelum sampai ke sana, mari kita lihat dulu wujud nyata masalah yang muncul ketika version control tidak dipakai sama sekali — materi chapter Masalah Tanpa Version Control .