Git
Chapters ▾ 2nd Edition

1.1 Untuk Bermula - Mengenai Kawalan Versi

Bab ini akan mengenai bagaimana untuk bermula dengan Git. Kami akan bermula dengan menerangkan beberapa latar belakang yang ada pada alat kawalan versi, kemudian beralih kepada bagaimana untuk menjalankan Git pada sistem anda dan akhirnya bagaimana untuk membuatkannya bersiap sedia untuk mula bekerja. Pada akhir bab ini, anda haruslah memahami mengapakah Git digunakan di semua tempat, mengapakah anda perlu menggunakannya dan anda sepatutnya bersiap sedia untuk berbuat demikian.

Mengenai Kawalan Versi

Apakah itu “kawalan versi”, dan mengapakah harus anda mengambil perhatian mengenainya? Kawalan versi merupakan suatu sistem yang merekodkan perubahan yang dibuat kepada suatu fail atau set fail dari semasa ke semasa supaya anda boleh mengembalikan versi tertentu pasa masa hadapan. Untuk contoh-contoh dalam buku ini, anda akan menggunakan kod sumber perisian sebagai fail yang telah dikawal versi, walaupun hakikatnya anda boleh melakukan ini dengan hampir apa-apa jenis fail pada komputer.

Jika anda merupakan seorang pereka grafik atau laman web dan ingin untuk menyimpankan setiap versi bagi sesuatu imej atau susun atur (yang pasti anda inginkan), Sistem Kawalan Versi ataupun Version Control System (VCS) adalah antara perkara bijak yang boleh digunakan. Ia membolehkan anda mengembalikan semula fail terpilih kepada keadaan sebelumnya, mengembalikan semula seluruh projek kepada keadaan sebelumnya, membandingkan perubahan dari semasa ke semasa, melihat siapakah yang telah mengubahkan sesuatu akhirnya yang mungkin menyebabkan masalah, siapakah yang memperkenalkan sesuatu isu dan bilakah, serta banyak lagi. Menggunakan VCS juga secara amnya bermakna bahawa jika anda mengacaukan atau kehilangan fail, anda boleh dengan mudah memulihkannya. Di samping itu, anda boleh mendapat kesemua ini dengan overhed yang sangat sedikit.

Sistem Kawalan Versi Tempatan

Kaedah pilihan kawalan versi bagi orang ramai adalah menyalinkan fail ke direktori lain (mungkin suatu direktori yang dicap masa, jika mereka pandai). Pendekatan ini adalah suatu kebiasaan kerana ia adalah sangat mudah, tetapi ia juga sangat mudah terjejas oleh ralat. Ia adalah sangat mudah untuk melupakan direktori yang anda masukkan dalam dan secara tidak sengaja menuliskan kepada fail yang salah atau menyalinkan fail yang bukan anda maksudkan.

Untuk menangani isu ini, pengaturcara telah sejak lama lagi membangunkan VCS tempatan yang mempunyai pangkalan data mudah di mana boleh menyimpan semua perubahan kepada fail di bawah kawalan semakan.

Diagram kawalan versi tempatan
Figure 1. Kawalan versi tempatan.

Salah satu alat VCS yang lebih popular ialah sistem yang dikenali sebagai RCS, yang masih diedarkan dalam banyak komputer hari ini. RCS berfungsi dengan menyimpankan set tampalan ataupun patch (iaitu, perbezaan antara fail) dalam suatu format khas pada cakera; ia boleh membuat semula apa yang kelihatan bila-bila masa bagi mana-mana fail sahaja dengan menambahkan kesemua tampalan.

Sistem Kawalan Versi Terpusat

Isu utama seterusnya yang dihadapi oleh ramai orang adalah bahawa mereka perlu bekerjasama dengan pembangun pada sistem lain. Untuk menangani masalah ini, Sistem Kawalan Versi Terpusat ataupun Centralized Version Control Systems (CVCS) telah dibangunkan. Sistem ini, seperti CVS, Subversi ataupun Subversion, dan Perforce, mempunyai satu pelayan tunggal yang mengandungi semua versi fail, dan jumlah bilangan klien yang menyemak fail dari tempat pusat itu. Selama banyak tahun, ini telah menjadi suatu standard bagi kawalan versi.

Diagram kawalan versi terpusat
Figure 2. Kawalan versi terpusat.

Persediaan ini menawarkan banyak kelebihan, terutamanya apabila berbanding dengan VCS tempatan. Sebagai contohnya, setiap orang boleh mengetahui tahap tertentu bahawa apa yang telah dilakukan oleh orang lain dalam projek itu. Pentadbir mempunyai kawalan yang baik mengenai siapakah yang boleh melakukan apa sahaja, dan jauh lebih mudah untuk mentadbir suatu CVCS daripada berurusan dengan pangkalan data tempatan pada setiap klien.

Walau bagaimanapun, persediaan ini juga mempunyai beberapa kelemahan yang serius. Yang paling jelas ialah titik kegagalan tunggal yang diwakili oleh pelayan terpusat. Sekiranya pelayan itu tidak berfungsi selama sejam, maka pada waktu itu tiada sesiapa yang boleh bekerjasama sama sekali atau menyimpankan perubahan versi kepada apa sahaja yang dikerjakan oleh mereka. Sekiranya cakera keras bagi pangkalan data pusat telah menjadi rosak, dan sandaran yang betul tidak disimpanlan, anda akan kehilangan segala-galanya — seluruh sejarah projek itu kecuali apa-apa tangkapan gambar tunggal pada mesin tempatan mereka. Sistem VCS tempatan akan mempunyai masalah yang sama — pada waktu bila-bila masa anda mempunyai seluruh sejarah projek di satu tempat, anda akan kehilangan segala-galanya.

Sistem Kawalan Versi Distribusi

Di sinilah merupakan tempat di mana Sistem Kawalan Versi Distribusi ataupun Distributed Version Control Systems (DVCS) berada. Dalam sesuatu DVCS (seperti Git, Mercurial, Bazaar atau Darcs), klien tidak hanya melihat tangkapan gambar terkini bagi fail mereka; Sebaliknya, mereka mahu untuk mencerminkan sepenuhnya repositori, termasuklah sejarah penuhnya. Oleh itu, jika mana-mana pelayan telah tidak berfungsi, dan sistem-sistem ini yang telah bekerjasama melalui pelayan, mana-mana repositori klien sepanjang masa ini boleh disalin semula ke pelayan untuk memulihkannya. Setiap klon sememangnya merupakan sandaran penuh bagi semua data.

Diagram kawalan versi distribusi
Figure 3. Kawalan versi distribusi.

Tambahan pula, kebanyakan sistem ini berurusan baik dengan mempunyai beberapa repositori bersifat jauh yang boleh dikerjakan oleh mereka bersama, jadi anda boleh bekerjasama dengan kumpulan orang yang berbeza dengan cara yang berlainan pada masa yang sama dalam projek yang sama. Ini membolehkan anda menubuhkan beberapa jenis aliran kerja yang tidak mungkin dilakukan dalam sistem terpusat, seperti model hierarki.