Mengapa kontrol versi

Model snapshot, kolaborasi, dan riwayat sebagai jaring pengaman yang menjadikan kontrol versi diperlukan.

Daftar isi

Kontrol versi (version control) adalah sistem yang mencatat setiap perubahan berkas dari waktu ke waktu sehingga keadaan proyek pada saat tertentu dapat dipanggil kembali. Topik ini membahas masalah yang dijawab oleh kontrol versi, cara kerja pencatatan versinya, perannya dalam kolaborasi, dan fungsinya sebagai jaring pengaman. Pemahaman ini menjadi dasar sebelum perintah Git mana pun dipraktikkan.

Salinan manual dan batasnya#

Cara paling tua untuk menjaga versi sebuah proyek adalah menyalin foldernya secara manual. Nama foldernya cepat bertambah menjadi proyek-akhir, proyek-akhir-revisi, dan proyek-akhir-FIX, tanpa informasi apa pun tentang apa yang berubah di antara salinan-salinan itu. Ketika sebuah perubahan ternyata merusak fitur, memutar kembali ke keadaan yang baik berarti menebak salinan mana yang benar, lalu menyalinnya secara manual sambil berharap tidak ada berkas yang tertinggal.

Kelemahan lainnya muncul ketika lebih dari satu orang bekerja pada proyek yang sama. Dua orang yang menyalin folder yang sama lalu menyunting salinannya masing-masing akan menghasilkan dua versi yang harus digabungkan dengan tangan. Berkas yang ditimpa tidak dapat dipulihkan, dan tidak ada catatan tentang siapa mengubah apa. Masalah inilah yang dijawab secara sistematis oleh kontrol versi.

Cara kerja kontrol versi#

Sistem kontrol versi mencatat keadaan proyek pada titik-titik tertentu sebagai rekaman yang disebut commit. Sebuah commit menyimpan keadaan seluruh berkas yang dilacak pada saat itu, siapa yang membuat rekaman, kapan rekaman dibuat, dan pesan yang menjelaskan perubahannya. Rekaman-rekaman itu membentuk rantai yang dapat ditelusuri dari versi terbaru sampai versi pertama proyek.

Dengan struktur seperti itu, beberapa kemampuan menjadi tersedia secara otomatis. Keadaan proyek pada commit mana pun dapat dibuka kembali, sehingga memutar kembali perubahan yang merusak tidak lagi bergantung pada tebakan. Perbedaan antara dua versi dapat ditampilkan berbaris per baris, sehingga dampak sebuah perubahan dapat ditinjau sebelum diterima. Git sendiri dibuat oleh Linus Torvalds pada tahun 2005 untuk mengelola pengembangan kernel Linux, dan sekarang menjadi sistem kontrol versi yang paling banyak digunakan.

Kolaborasi tanpa saling menimpa#

Kontrol versi memungkinkan beberapa orang mengerjakan proyek yang sama tanpa salinan folder terpisah yang rawan tertukar. Setiap orang memperoleh salinan lengkap proyek beserta seluruh riwayatnya, lalu mengerjakan perubahannya secara terpisah pada jalur kerja yang disebut branch. Ketika pekerjaan selesai, perubahan tersebut digabungkan kembali melalui proses yang disebut merge.

Sebagai contoh, Ali menyunting hitung.py untuk menambahkan fitur diskon, sedangkan Citra memperbaiki laporan.md pada waktu yang hampir sama. Keduanya bekerja pada branch masing-masing, lalu kedua branch digabungkan. Apabila kedua perubahan menyentuh baris yang sama, kontrol versi menandai bagian yang bertabrakan secara eksplisit dan menuntut keputusan yang sadar, alih-alih diam-diam menimpa pekerjaan orang lain. Pencatatan per commit juga menjawab pertanyaan klasik tim, yaitu siapa mengubah sebuah baris dan kapan perubahan itu terjadi.

Riwayat sebagai jaring pengaman#

Riwayat commit berfungsi sebagai jaring pengaman atas segala kesalahan. Commit yang keliru dapat dibatalkan, berkas yang terhapus dapat dikembalikan dari commit sebelumnya, dan percobaan yang gagal dapat ditinggalkan tanpa merusak pekerjaan yang sudah baik. Karena setiap commit menyimpan metadata penulis dan waktunya, riwayat juga menjadi alat investigasi ketika sebuah bug perlu dilacak sampai ke perubahan yang menimbulkannya.

Riwayat tersebut hanya berguna apabila commit dibuat secara rutin. Commit kecil yang sering dibuat memberikan banyak titik pemulihan, sedangkan commit raksasa yang dikumpulkan berhari-hari memberikan satu titik pemulihan yang kasar. Kebiasaan mengerjakan dalam potongan kecil dan merekamnya dengan pesan yang jelas adalah keterampilan yang dilatih sepanjang jalur ini.

Ringkasan#

  • Kontrol versi mencatat keadaan proyek sebagai commit yang berantai, sehingga versi mana pun dapat dipanggil kembali dan dibandingkan.
  • Branch memungkinkan beberapa orang bekerja paralel, dan merge menggabungkan hasilnya sambil menandai tabrakan secara eksplisit.
  • Riwayat yang teratur menjadi jaring pengaman untuk membatalkan kesalahan dan melacak penyebab bug.

Referensi#