Tentang sistem kontrol versi

Halo! Minggu depan OTUS akan memulai "Lokakarya super tentang penggunaan dan konfigurasi GIT" . Inilah yang saya putuskan untuk didedikasikan untuk publikasi hari ini.










pengantar



Saya mengusulkan untuk membahas tujuan dan berbagai cara mengatur sistem kontrol versi.



Sistem kontrol versi



Sistem kontrol versi pada dasarnya adalah alat, dan alat dirancang untuk memecahkan masalah kelas tertentu. Jadi, sistem kontrol versi adalah sistem yang merekam perubahan

pada file atau sekumpulan file dari waktu ke waktu dan memungkinkan Anda untuk kembali nanti ke versi tertentu. Kami ingin secara fleksibel mengelola sekumpulan file tertentu, memutar kembali ke versi tertentu jika perlu. Anda dapat membatalkan perubahan tertentu pada file, memutar kembali penghapusannya, melihat siapa yang telah mengubah sesuatu. Biasanya, sistem kontrol versi digunakan untuk menyimpan kode sumber, tetapi ini tidak diperlukan. Mereka dapat digunakan untuk menyimpan semua jenis file.



Bagaimana cara menyimpan versi file yang berbeda? Orang tidak langsung datang ke alat seperti sistem kontrol versi, dan mereka sendiri bisa sangat berbeda. Masalah yang diusulkan dapat diselesaikan menggunakan sistem kontrol versi lama yang baik salin-tempel, lokal, terpusat atau terdistribusi.



Salin-tempel



Sebuah metode yang terkenal, ketika diterapkan pada masalah ini, mungkin terlihat seperti ini: kita akan memberi nama file dengan pola nama file_ {version}, mungkin dengan tambahan waktu pembuatan atau modifikasi.



Metode ini sangat sederhana, tetapi rentan terhadap berbagai kesalahan: Anda dapat secara tidak sengaja mengubah file yang salah, Anda dapat menyalin dari direktori yang salah (bagaimanapun, begitulah cara file ditransfer dalam model ini).



Sistem kontrol versi lokal



Langkah selanjutnya dalam pengembangan sistem kontrol versi adalah pembuatan sistem kontrol versi lokal. Mereka adalah database sederhana yang menyimpan catatan semua perubahan dalam file.



Salah satu contoh dari sistem tersebut adalah sistem kontrol versi RCS, yang dikembangkan pada tahun 1985 (tambalan terakhir ditulis pada tahun 2015) dan menyimpan perubahan dalam file (tambalan) sambil mempertahankan kontrol versi. Serangkaian perubahan ini memungkinkan Anda memulihkan status file apa pun. RCS dikirimkan dengan Linux.



Sistem kontrol versi lokal melakukan pekerjaan yang baik untuk memecahkan masalah, tetapi masalahnya adalah properti utama - lokalitas. Itu sama sekali tidak dimaksudkan untuk penggunaan kolektif.



Sistem kontrol versi terpusat



Sistem kendali versi terpusat dirancang untuk memecahkan masalah dasar dari sistem kendali versi lokal.



Untuk mengatur sistem kontrol versi seperti itu, satu server digunakan yang berisi semua versi file. Klien yang mengakses server ini didapat dari repositori terpusat ini. Penggunaan sistem kontrol versi terpusat telah menjadi standar selama bertahun-tahun. Ini termasuk CVS, Subversion, Perforce.



Sistem ini mudah dikelola karena satu server. Tetapi pada saat yang sama, kehadiran server terpusat mengarah pada munculnya satu titik kegagalan dalam bentuk server itu sendiri. Jika server ini dinonaktifkan, pengembang tidak akan dapat mengunduh file. Skenario terburuk adalah kerusakan fisik server (atau kerusakan hard disk), yang menyebabkan hilangnya basis kode.



Terlepas dari kenyataan bahwa mode SVN telah berlalu, terkadang ada gerakan sebaliknya - transisi dari Git ke SVN. Intinya adalah SVN memungkinkan pembayaran selektif, yang melibatkan hanya mengunduh beberapa file dari server. Pendekatan ini mendapatkan popularitas saat menggunakan monorepositories, yang dapat didiskusikan nanti.



Sistem kontrol versi terdistribusi



Sistem kontrol versi terdistribusi digunakan untuk menghilangkan satu titik kegagalan. Mereka menyiratkan bahwa klien akan mengunduh seluruh repositori untuk dirinya sendiri alih-alih mengunduh file tertentu yang menarik untuk klien. Jika ada salinan repositori yang mati, maka ini tidak akan menyebabkan hilangnya basis kode, karena dapat dipulihkan dari komputer pengembang mana pun. Setiap salinan adalah cadangan data yang lengkap.



Semua salinan sama dan dapat disinkronkan satu sama lain. Pendekatan ini sangat mirip dengan (dan memang) replikasi master-master.



Jenis sistem kontrol versi ini mencakup Mercurial, Bazaar, Darcs, dan Git. Sistem kontrol versi terakhir akan dibahas lebih detail di bawah ini.



Sejarah Git



Pada tahun 2005, perusahaan kontrol versi BitKeeper memutuskan hubungan dengan komunitas kernel Linux. Komunitas kemudian memutuskan untuk mengembangkan sistem kontrol versinya sendiri. Nilai utama dari sistem baru ini adalah: desentralisasi lengkap, kecepatan, arsitektur sederhana, dukungan yang baik untuk pengembangan non-linier.



Kesimpulan



Kami memeriksa cara-cara mengatur sistem kontrol versi, membahas opsi untuk menyelesaikan tugas yang ditugaskan ke sistem ini, berbicara tentang kelebihan dan kekurangan masing-masing, berkenalan dengan sejarah sistem kontrol versi Git.






All Articles