"Hai, Amigo!"

"Hai!"

"Hari ini saya akan memberi tahu Anda tentang sistem kontrol versi."

"Seperti yang mungkin sudah Anda ketahui, program seringkali berukuran sangat besar dan membutuhkan waktu yang sangat lama untuk menulisnya. Terkadang puluhan orang dapat menghabiskan waktu bertahun-tahun untuk menulis sebuah program."

"Proyek dengan jutaan baris kode adalah kenyataan."

"Wah."

"Semuanya sangat rumit. Orang sering mengganggu satu sama lain, dan sering memodifikasi kode yang sama, dan seterusnya."

"Untuk menertibkan kekacauan ini, pemrogram mulai menggunakan sistem kontrol versi untuk kode mereka."

" Sistem kontrol versi adalah program yang terdiri dari klien dan server.

"Program menyimpan data (kode yang ditulis oleh pemrogram) di server, dan pemrogram menambah atau mengubahnya menggunakan klien."

"Perbedaan utama antara sistem kontrol versi dan program yang memungkinkan untuk bekerja secara kolaboratif pada dokumen adalah ia menyimpan semua versi sebelumnya dari semua dokumen (file kode)."

"Bisakah Anda memberi saya rincian lebih lanjut. Bagaimana cara kerjanya?"

"Bayangkan Anda adalah seorang programmer dan Anda ingin membuat perubahan kecil pada kode sumber program yang disimpan dalam repositori di server."

"Inilah yang perlu Anda lakukan:"

"1) Masuk ke server."

"2) Salin versi terbaru semua file ke komputer Anda menggunakan perintah Checkout."

"3) Buat perubahan pada file yang diperlukan."

"4) Jalankan program secara lokal untuk memastikan program dapat dikompilasi dan dijalankan."

"5) Kirim 'perubahan' Anda ke server menggunakan perintah Komit."

"Itu umumnya masuk akal."

"Tapi masih ada lagi. Bayangkan Anda tiba di tempat kerja di pagi hari, tetapi saat ini sudah jam makan siang di India. Jadi rekan India Anda telah melakukan perubahan dan melakukan perubahan mereka ke repositori Anda di server."

"Anda harus bekerja dengan kode versi terbaru. Jadi, Anda menjalankan perintah Perbarui ."

"Apa bedanya dengan Checkout ?"

" Checkout dirancang untuk menyalin semua file repositori, tetapi Perbarui hanya memperbarui file yang telah diperbarui di server sejak terakhir kali Anda menjalankan perintah Checkout / Perbarui ."

"Beginilah kira-kira cara kerjanya:"

Keluar :

Sistem kontrol versi - 1

"Sekarang, katakanlah kita mengubah file B dan ingin mengunggahnya ke server. Untuk melakukannya, kita perlu menggunakan perintah Komit ."

Sistem kontrol versi - 2

"Dan inilah cara kerja perintah Perbarui :"

Sistem kontrol versi - 3

"Menarik sekali! Apakah ada perintah lain?"

"Ya, ada beberapa. Tapi bervariasi tergantung pada program kontrol versi mana yang Anda pilih. Jadi, saya hanya mencoba menjelaskan prinsip-prinsip umumnya."

"Ada juga operasi yang disebut penggabungan—penyatuan dua dokumen. Misalkan dua pemrogram memodifikasi file yang sama pada waktu yang sama. Kemudian program di server tidak akan mengizinkan kedua perubahan dilakukan. Siapa pun yang melakukan pertama kali dapat menambahkan miliknya atau perubahannya."

"Jadi, apa yang orang lain lakukan?"

"Dia akan diundang untuk melakukan operasi Pembaruan untuk mengambil perubahan terbaru dari server. Omong-omong, ini — melakukan Pembaruan sebelum melakukan — adalah praktik yang baik."

"Kemudian, selama operasi Pembaruan, program klien akan mencoba menggabungkan perubahan lokal dengan perubahan yang diterima dari server."

"Jika pemrogram mengubah bagian file yang berbeda, maka program kontrol versi mungkin akan berhasil menggabungkannya.  Jika perubahan berada di tempat yang sama, maka program kontrol versi akan melaporkan konflik penggabungan dan meminta pengguna untuk secara manual menggabungkan perubahan."

"Misalnya, ini sering terjadi ketika kedua pemrogram menambahkan sesuatu di akhir file."

"Begitu. Secara keseluruhan, sepertinya masuk akal."

"Dan ada satu hal lagi: cabang."

"Bayangkan dua pemrogram dari satu tim ditugaskan untuk menulis ulang modul yang sama. Atau bahkan lebih baik - menulis ulang dari awal. Sampai modul ini selesai, program tidak akan dapat dijalankan, dan bahkan mungkin tidak dapat dikompilasi."

"Jadi apa yang harus mereka lakukan?"

"Mereka bergerak maju dengan menambahkan cabang ke repositori. Secara kasar, ini berarti repositori dibagi menjadi dua bagian. Bukan berdasarkan file atau direktori, tetapi berdasarkan versi."

"Bayangkan listrik tidak pernah ditemukan dan robot tidak pernah ditemukan. Maka tiga perang pembebasan tidak akan pernah terjadi, dan seluruh sejarah manusia akan mengikuti jalan yang sama sekali berbeda. "

"Jalan ini adalah cabang sejarah alternatif."

"Atau Anda bisa mencoba membayangkan cabang hanya sebagai salinan dari repositori. Dengan kata lain, pada titik tertentu, kami membuat tiruan dari repositori di server, sehingga selain repositori utama (sering disebut trunk ), kami memiliki cabang lain ."

"Yah, sepertinya itu lebih bisa dimengerti.

"Mengapa Anda tidak mengatakan bahwa kami menyalin repositori?"

"Ini bukan penyalinan sederhana."

"Cabang-cabang ini tidak hanya dapat dipisahkan dari batangnya, tetapi juga digabungkan ke dalamnya."

"Dengan kata lain, beberapa pekerjaan dapat dilakukan di cabang, dan setelah selesai Anda dapat menambahkan cabang repositori ke batang repositori?"

"Ya."

"Dan apa yang akan terjadi pada berkas-berkas itu?"

"File-file itu akan digabungkan."

"Yah, kedengarannya keren. Kuharap aksinya sama kerennya."

"Dan kemudian beberapa. Oke, mari kita istirahat."

"Ada banyak informasi berguna  di sini "