“สวัสดี อามีโก้!”

"สวัสดี!"

"วันนี้ฉันจะบอกคุณเกี่ยวกับระบบควบคุมเวอร์ชัน"

"อย่างที่คุณทราบอยู่แล้วว่าโปรแกรมมักมีขนาดใหญ่มากและใช้เวลานานมากในการเขียน บางครั้งคนหลายสิบคนอาจใช้เวลาหลายปีในการเขียนโปรแกรม"

"โครงการที่มีโค้ดหลายล้านบรรทัดเป็นจริงได้"

"โว้ว."

"ทุกอย่างซับซ้อนมาก คนเรามักจะรบกวนซึ่งกันและกัน และมักจะแก้ไขโค้ดเดียวกัน และอื่นๆ ซ้ำๆ"

"เพื่อทำให้เกิดความยุ่งเหยิงนี้ โปรแกรมเมอร์เริ่มใช้ระบบการควบคุมเวอร์ชันสำหรับโค้ดของตน"

" ระบบควบคุมเวอร์ชันคือโปรแกรมที่ประกอบด้วยไคลเอนต์และเซิร์ฟเวอร์

"โปรแกรมเก็บข้อมูล (รหัสที่เขียนโดยโปรแกรมเมอร์) ไว้บนเซิร์ฟเวอร์ และโปรแกรมเมอร์จะเพิ่มหรือเปลี่ยนแปลงโดยใช้ไคลเอ็นต์"

"ข้อแตกต่างที่สำคัญระหว่างระบบควบคุมเวอร์ชันและโปรแกรมที่ทำให้สามารถทำงานร่วมกันในเอกสารได้ก็คือ ระบบจะจัดเก็บเอกสารทั้งหมด (ไฟล์โค้ด) เวอร์ชันก่อนหน้าทั้งหมด"

"คุณช่วยบอกรายละเอียดเพิ่มเติมได้ไหม มันทำงานอย่างไร"

"ลองนึกภาพว่าคุณเป็นโปรแกรมเมอร์และคุณต้องการเปลี่ยนแปลงซอร์สโค้ดของโปรแกรมที่จัดเก็บไว้ในที่เก็บบนเซิร์ฟเวอร์"

"นี่คือสิ่งที่คุณต้องทำ:"

"1) เข้าสู่ระบบเซิร์ฟเวอร์"

"2) คัดลอกเวอร์ชันล่าสุดของไฟล์ทั้งหมดไปยังคอมพิวเตอร์ของคุณโดยใช้คำสั่ง Checkout"

"3) แก้ไขไฟล์ที่ต้องการ"

"4) รันโปรแกรมในเครื่องเพื่อให้แน่ใจว่าคอมไพล์และรัน"

"5) ส่ง 'การเปลี่ยนแปลง' ของคุณไปยังเซิร์ฟเวอร์โดยใช้คำสั่ง Commit"

"โดยทั่วไปก็สมเหตุสมผล"

"แต่ยังมีมากกว่านั้น ลองนึกภาพว่าคุณมาถึงที่ทำงานในตอนเช้า แต่เป็นเวลาพักเที่ยงในอินเดียแล้ว ดังนั้นเพื่อนร่วมงานชาวอินเดียของคุณจึงทำการเปลี่ยนแปลงและยืนยันการเปลี่ยนแปลงที่เก็บข้อมูลของคุณบนเซิร์ฟเวอร์แล้ว"

"คุณต้องทำงานกับโค้ดเวอร์ชันล่าสุด ดังนั้นคุณจึงใช้ คำสั่ง Update "

"แตกต่างจากCheckout อย่างไร "

" Checkoutออกแบบมาเพื่อคัดลอกไฟล์ของที่เก็บทั้งหมด แต่ Update จะอัพเดทเฉพาะไฟล์ที่อัพเดทบนเซิร์ฟเวอร์ตั้งแต่ครั้งสุดท้ายที่คุณเรียกใช้คำสั่งCheckout / Update "

"นี่คือวิธีการทำงานโดยประมาณ:"

ชำระเงิน :

ระบบควบคุมเวอร์ชัน - 1

"ตอนนี้ สมมติว่าเราเปลี่ยนไฟล์ B และต้องการอัปโหลดไปยังเซิร์ฟเวอร์ ในการทำเช่นนี้ เราต้องใช้คำ สั่ง Commit "

ระบบควบคุมเวอร์ชัน - 2

"และนี่คือวิธี การทำงานของคำสั่ง Update :"

ระบบควบคุมเวอร์ชัน - 3

"น่าสนใจจัง! มีคำสั่งอื่นอีกไหม?"

"ใช่ มีค่อนข้างน้อย แต่จะแตกต่างกันไปขึ้นอยู่กับโปรแกรมควบคุมเวอร์ชันที่คุณเลือก ดังนั้นฉันจึงพยายามอธิบายหลักการทั่วไปเท่านั้น"

"ยังมีการดำเนินการที่เรียกว่าการผสาน—การรวมกันของสองเอกสาร สมมติว่าโปรแกรมเมอร์สองคนแก้ไขไฟล์เดียวกันในเวลาเดียวกัน จากนั้นโปรแกรมบนเซิร์ฟเวอร์จะไม่อนุญาตให้ทำการเปลี่ยนแปลงทั้งสองอย่าง ใครก็ตามที่ยอมรับก่อนจะได้รับเพิ่มของเขา หรือการเปลี่ยนแปลงของเธอ”

“แล้วอีกคนจะทำยังไง”

"เขาหรือเธอจะได้รับเชิญให้ดำเนิน การ อัปเดตเพื่อรับการเปลี่ยนแปลงล่าสุดจากเซิร์ฟเวอร์ ยังไงก็ตาม การดำเนินการนี้ - การอัปเดตก่อนที่จะกระทำ - เป็นแนวปฏิบัติที่ดี"

"จากนั้น ในระหว่างการดำเนินการอัปเดต โปรแกรมไคลเอนต์จะพยายามรวมการเปลี่ยนแปลงในเครื่องกับการเปลี่ยนแปลงที่ได้รับจากเซิร์ฟเวอร์"

"หากโปรแกรมเมอร์เปลี่ยนส่วนต่างๆ ของไฟล์ โปรแกรมควบคุมเวอร์ชันน่าจะสามารถผสานได้สำเร็จ หากการเปลี่ยนแปลงอยู่ในที่เดียวกัน โปรแกรมควบคุมเวอร์ชันจะรายงานข้อขัดแย้งในการผสานและแจ้งให้ผู้ใช้ด้วยตนเอง รวมการเปลี่ยนแปลง"

"ตัวอย่างเช่น สิ่งนี้มักเกิดขึ้นเมื่อโปรแกรมเมอร์ทั้งสองเพิ่มบางสิ่งที่ส่วนท้ายของไฟล์"

"เข้าใจแล้ว โดยรวมแล้วถือว่าสมเหตุสมผล"

"และยังมีอีกสิ่งหนึ่ง: กิ่งไม้"

"ลองนึกภาพว่าโปรแกรมเมอร์สองคนจากทีมหนึ่งได้รับมอบหมายให้เขียนโมดูลเดียวกันใหม่ หรือดีกว่านั้น — เขียนใหม่ตั้งแต่เริ่มต้น จนกว่าโมดูลนี้จะเสร็จสมบูรณ์ โปรแกรมจะไม่สามารถทำงานและอาจคอมไพล์ไม่ได้ด้วยซ้ำ"

“แล้วพวกเธอต้องทำยังไง”

"พวกเขาก้าวไปข้างหน้าด้วยการเพิ่มสาขาไปยังที่เก็บ พูดคร่าวๆ นี่หมายความว่าที่เก็บถูกแบ่งออกเป็นสองส่วน ไม่ใช่ตามไฟล์หรือไดเร็กทอรี แต่ตามเวอร์ชัน"

"ลองนึกภาพว่าไฟฟ้าไม่เคยถูกค้นพบและหุ่นยนต์ไม่เคยถูกประดิษฐ์ขึ้น เมื่อนั้นสงครามปลดปล่อยสามครั้งจะไม่เกิดขึ้น และประวัติศาสตร์ของมนุษย์ทั้งหมดจะดำเนินไปตามเส้นทางที่แตกต่างไปจากเดิมอย่างสิ้นเชิง "

"เส้นทางนี้เป็นสาขาทางเลือกของประวัติศาสตร์"

"หรือคุณลองนึกภาพสาขาเป็นสำเนาของที่เก็บก็ได้ กล่าวอีกนัยหนึ่ง ในบางจุด เราสร้างสำเนาของที่เก็บบนเซิร์ฟเวอร์ เพื่อให้นอกเหนือจากที่เก็บหลัก ( มักเรียกว่าลำต้น ) เรามีสาขา อื่น "

“อืม ดูเหมือนจะเข้าใจมากขึ้น

"ทำไมคุณไม่บอกว่าเราคัดลอกที่เก็บ?"

"นี่ไม่ใช่การคัดลอกแบบธรรมดา"

"กิ่งก้านเหล่านี้ไม่เพียงแยกออกจากลำต้นเท่านั้น แต่ยังรวมเข้าด้วยกันด้วย"

"กล่าวอีกนัยหนึ่งคือ งานบางอย่างสามารถทำได้ในสาขา และเมื่อเสร็จสิ้น คุณสามารถเพิ่มสาขาที่เก็บไปยังที่เก็บลำต้นได้"

"ใช่."

“แล้วจะเกิดอะไรขึ้นกับไฟล์”

"ไฟล์จะถูกรวมเข้าด้วยกัน"

"อืม ฟังดูดี ฉันหวังว่ามันจะเจ๋งพอๆ กับการกระทำ"

“แล้วก็บ้าง โอเค เราพักกันเถอะ”

"มีข้อมูลที่เป็นประโยชน์มากมาย  ที่นี่ "