"Hai, Amigo!"

"Hai!"

"Hari ini saya akan memberitahu anda tentang sistem kawalan versi."

"Seperti yang anda mungkin sedia maklum, program selalunya sangat besar dan mengambil masa yang sangat lama untuk menulis. Kadang-kadang berpuluh-puluh orang boleh menghabiskan masa bertahun-tahun menulis program."

"Projek dengan berjuta-juta baris kod adalah realiti."

"Wah."

"Semuanya sangat rumit. Orang ramai sering campur tangan antara satu sama lain, dan sering mengubah suai kod yang sama, dan seterusnya dan seterusnya."

"Untuk memulihkan keadaan huru-hara ini, pengaturcara mula menggunakan sistem kawalan versi untuk kod mereka."

" Sistem kawalan versi ialah program yang terdiri daripada klien dan pelayan.

"Atur cara menyimpan data (kod yang ditulis oleh pengaturcara) pada pelayan, dan pengaturcara menambah atau mengubahnya menggunakan klien."

"Perbezaan utama antara sistem kawalan versi dan program yang hanya memungkinkan untuk bekerja secara kolaboratif pada dokumen ialah ia menyimpan semua versi sebelumnya bagi semua dokumen (fail kod)."

"Bolehkah anda memberi saya butiran lanjut. Bagaimana semuanya berfungsi?"

"Bayangkan bahawa anda seorang pengaturcara dan anda ingin membuat perubahan kecil pada kod sumber program yang disimpan dalam repositori pada pelayan."

"Ini perkara yang perlu anda lakukan:"

"1) Log masuk ke pelayan."

"2) Salin versi terkini semua fail ke komputer anda menggunakan arahan Checkout."

"3) Buat perubahan pada fail yang diperlukan."

"4) Jalankan program secara tempatan untuk memastikan ia menyusun dan berjalan."

"5) Hantar 'perubahan' anda ke pelayan menggunakan arahan Commit."

"Itu secara amnya masuk akal."

"Tetapi masih banyak lagi. Bayangkan anda tiba di tempat kerja pada waktu pagi, tetapi sudah masuk waktu makan tengah hari di India. Jadi rakan sekerja India anda telah membuat perubahan dan melakukan perubahan mereka pada repositori anda pada pelayan."

"Anda perlu bekerja dengan versi terkini kod. Jadi anda melaksanakan perintah Kemas Kini ."

"Bagaimanakah itu berbeza daripada Checkout ?"

" Checkout direka untuk menyalin semua fail repositori, tetapi Kemas kini hanya mengemas kini fail yang telah dikemas kini pada pelayan sejak kali terakhir anda menjalankan arahan Checkout / Kemas kini ."

"Ini lebih kurang cara ia berfungsi:"

Daftar keluar :

Sistem kawalan versi - 1

"Sekarang, katakan kita menukar fail B dan mahu memuat naiknya ke pelayan. Untuk melakukan ini, kita perlu menggunakan arahan Komit ."

Sistem kawalan versi - 2

"Dan inilah cara perintah Kemas Kini berfungsi:"

Sistem kawalan versi - 3

"Menariknya! Adakah ada arahan lain?"

"Ya, terdapat sedikit. Tetapi ia berbeza-beza bergantung pada program kawalan versi yang anda pilih. Jadi, saya cuba menerangkan prinsip umum sahaja."

"Terdapat juga operasi yang dipanggil penggabungan—penyatuan dua dokumen. Katakan dua pengaturcara diubah suai fail yang sama pada masa yang sama. Kemudian atur cara pada pelayan tidak akan membenarkan kedua-dua perubahan dilakukan. Sesiapa yang melakukan terlebih dahulu akan menambahnya atau perubahannya."

"Jadi apa yang orang lain buat?"

"Dia akan dijemput untuk melakukan operasi Kemas Kini untuk mendapatkan perubahan terkini daripada pelayan. By the way, ini — melakukan Kemas Kini sebelum melakukan — adalah amalan yang baik."

"Kemudian, semasa operasi Kemas Kini, program klien akan cuba menggabungkan perubahan setempat dengan perubahan yang diterima daripada pelayan."

"Jika pengaturcara menukar bahagian fail yang berlainan, maka program kawalan versi mungkin akan dapat menggabungkannya dengan jayanya.  Jika perubahan berada di tempat yang sama, maka program kawalan versi akan melaporkan konflik gabungan dan menggesa pengguna untuk secara manual menggabungkan perubahan."

"Sebagai contoh, ini sering berlaku apabila kedua-dua pengaturcara menambah sesuatu pada penghujung fail."

"Saya faham. Secara keseluruhan, itu nampaknya munasabah."

"Dan ada satu perkara lagi: cawangan."

"Bayangkan bahawa dua pengaturcara daripada satu pasukan ditugaskan untuk menulis semula modul yang sama. Atau lebih baik lagi — menulis semula dari awal. Sehingga modul ini selesai, atur cara tidak akan dapat dijalankan, malah mungkin tidak dikompil."

"Jadi apa yang mereka patut buat?"

"Mereka bergerak ke hadapan dengan menambah cawangan pada repositori. Secara kasarnya, ini bermakna repositori dibahagikan kepada dua bahagian. Bukan mengikut fail atau direktori, tetapi mengikut versi."

"Bayangkan elektrik tidak pernah ditemui dan robot tidak pernah dicipta. Kemudian tiga perang pembebasan tidak akan pernah berlaku, dan semua sejarah manusia akan mengikuti jalan yang sama sekali berbeza. "

"Laluan ini adalah cabang sejarah alternatif."

"Atau anda boleh cuba menggambarkan cawangan sebagai salinan repositori sahaja. Dalam erti kata lain, pada satu ketika, kami membuat klon repositori pada pelayan, supaya, sebagai tambahan kepada repositori utama ( selalunya dipanggil trunk ), kami mempunyai cawangan lain ."

"Nah, itu nampaknya lebih difahami.

"Mengapa anda tidak boleh mengatakan bahawa kami menyalin repositori?"

"Ini bukan penyalinan yang mudah."

"Cawangan-cawangan ini bukan sahaja boleh dipisahkan dari batang, tetapi juga digabungkan ke dalamnya."

"Dengan kata lain, beberapa kerja boleh dilakukan dalam cawangan, dan kemudian apabila ia selesai anda boleh menambah cawangan repositori ke batang repositori?"

"Ya."

"Dan apa yang akan berlaku kepada fail?"

"Fail akan digabungkan."

"Nah, bunyinya bagus. Saya harap ia sama keren dalam tindakan."

"Dan kemudian beberapa. Okay, mari kita berehat."

"Terdapat banyak maklumat berguna  di sini "