“สวัสดี อามีโก้!”
"สวัสดี!"
"วันนี้ฉันจะบอกคุณเกี่ยวกับระบบควบคุมเวอร์ชัน"
"อย่างที่คุณทราบอยู่แล้วว่าโปรแกรมมักมีขนาดใหญ่มากและใช้เวลานานมากในการเขียน บางครั้งคนหลายสิบคนอาจใช้เวลาหลายปีในการเขียนโปรแกรม"
"โครงการที่มีโค้ดหลายล้านบรรทัดเป็นจริงได้"
"โว้ว."
"ทุกอย่างซับซ้อนมาก คนเรามักจะรบกวนซึ่งกันและกัน และมักจะแก้ไขโค้ดเดียวกัน และอื่นๆ ซ้ำๆ"
"เพื่อทำให้เกิดความยุ่งเหยิงนี้ โปรแกรมเมอร์เริ่มใช้ระบบการควบคุมเวอร์ชันสำหรับโค้ดของตน"
" ระบบควบคุมเวอร์ชันคือโปรแกรมที่ประกอบด้วยไคลเอนต์และเซิร์ฟเวอร์
"โปรแกรมเก็บข้อมูล (รหัสที่เขียนโดยโปรแกรมเมอร์) ไว้บนเซิร์ฟเวอร์ และโปรแกรมเมอร์จะเพิ่มหรือเปลี่ยนแปลงโดยใช้ไคลเอ็นต์"
"ข้อแตกต่างที่สำคัญระหว่างระบบควบคุมเวอร์ชันและโปรแกรมที่ทำให้สามารถทำงานร่วมกันในเอกสารได้ก็คือ ระบบจะจัดเก็บเอกสารทั้งหมด (ไฟล์โค้ด) เวอร์ชันก่อนหน้าทั้งหมด"
"คุณช่วยบอกรายละเอียดเพิ่มเติมได้ไหม มันทำงานอย่างไร"
"ลองนึกภาพว่าคุณเป็นโปรแกรมเมอร์และคุณต้องการเปลี่ยนแปลงซอร์สโค้ดของโปรแกรมที่จัดเก็บไว้ในที่เก็บบนเซิร์ฟเวอร์"
"นี่คือสิ่งที่คุณต้องทำ:"
"1) เข้าสู่ระบบเซิร์ฟเวอร์"
"2) คัดลอกเวอร์ชันล่าสุดของไฟล์ทั้งหมดไปยังคอมพิวเตอร์ของคุณโดยใช้คำสั่ง Checkout"
"3) แก้ไขไฟล์ที่ต้องการ"
"4) รันโปรแกรมในเครื่องเพื่อให้แน่ใจว่าคอมไพล์และรัน"
"5) ส่ง 'การเปลี่ยนแปลง' ของคุณไปยังเซิร์ฟเวอร์โดยใช้คำสั่ง Commit"
"โดยทั่วไปก็สมเหตุสมผล"
"แต่ยังมีมากกว่านั้น ลองนึกภาพว่าคุณมาถึงที่ทำงานในตอนเช้า แต่เป็นเวลาพักเที่ยงในอินเดียแล้ว ดังนั้นเพื่อนร่วมงานชาวอินเดียของคุณจึงทำการเปลี่ยนแปลงและยืนยันการเปลี่ยนแปลงที่เก็บข้อมูลของคุณบนเซิร์ฟเวอร์แล้ว"
"คุณต้องทำงานกับโค้ดเวอร์ชันล่าสุด ดังนั้นคุณจึงใช้ คำสั่ง Update "
"แตกต่างจากCheckout อย่างไร "
" Checkoutออกแบบมาเพื่อคัดลอกไฟล์ของที่เก็บทั้งหมด แต่ Update จะอัพเดทเฉพาะไฟล์ที่อัพเดทบนเซิร์ฟเวอร์ตั้งแต่ครั้งสุดท้ายที่คุณเรียกใช้คำสั่งCheckout / Update "
"นี่คือวิธีการทำงานโดยประมาณ:"
ชำระเงิน :
"ตอนนี้ สมมติว่าเราเปลี่ยนไฟล์ B และต้องการอัปโหลดไปยังเซิร์ฟเวอร์ ในการทำเช่นนี้ เราต้องใช้คำ สั่ง Commit "
"และนี่คือวิธี การทำงานของคำสั่ง Update :"
"น่าสนใจจัง! มีคำสั่งอื่นอีกไหม?"
"ใช่ มีค่อนข้างน้อย แต่จะแตกต่างกันไปขึ้นอยู่กับโปรแกรมควบคุมเวอร์ชันที่คุณเลือก ดังนั้นฉันจึงพยายามอธิบายหลักการทั่วไปเท่านั้น"
"ยังมีการดำเนินการที่เรียกว่าการผสาน—การรวมกันของสองเอกสาร สมมติว่าโปรแกรมเมอร์สองคนแก้ไขไฟล์เดียวกันในเวลาเดียวกัน จากนั้นโปรแกรมบนเซิร์ฟเวอร์จะไม่อนุญาตให้ทำการเปลี่ยนแปลงทั้งสองอย่าง ใครก็ตามที่ยอมรับก่อนจะได้รับเพิ่มของเขา หรือการเปลี่ยนแปลงของเธอ”
“แล้วอีกคนจะทำยังไง”
"เขาหรือเธอจะได้รับเชิญให้ดำเนิน การ อัปเดตเพื่อรับการเปลี่ยนแปลงล่าสุดจากเซิร์ฟเวอร์ ยังไงก็ตาม การดำเนินการนี้ - การอัปเดตก่อนที่จะกระทำ - เป็นแนวปฏิบัติที่ดี"
"จากนั้น ในระหว่างการดำเนินการอัปเดต โปรแกรมไคลเอนต์จะพยายามรวมการเปลี่ยนแปลงในเครื่องกับการเปลี่ยนแปลงที่ได้รับจากเซิร์ฟเวอร์"
"หากโปรแกรมเมอร์เปลี่ยนส่วนต่างๆ ของไฟล์ โปรแกรมควบคุมเวอร์ชันน่าจะสามารถผสานได้สำเร็จ หากการเปลี่ยนแปลงอยู่ในที่เดียวกัน โปรแกรมควบคุมเวอร์ชันจะรายงานข้อขัดแย้งในการผสานและแจ้งให้ผู้ใช้ด้วยตนเอง รวมการเปลี่ยนแปลง"
"ตัวอย่างเช่น สิ่งนี้มักเกิดขึ้นเมื่อโปรแกรมเมอร์ทั้งสองเพิ่มบางสิ่งที่ส่วนท้ายของไฟล์"
"เข้าใจแล้ว โดยรวมแล้วถือว่าสมเหตุสมผล"
"และยังมีอีกสิ่งหนึ่ง: กิ่งไม้"
"ลองนึกภาพว่าโปรแกรมเมอร์สองคนจากทีมหนึ่งได้รับมอบหมายให้เขียนโมดูลเดียวกันใหม่ หรือดีกว่านั้น — เขียนใหม่ตั้งแต่เริ่มต้น จนกว่าโมดูลนี้จะเสร็จสมบูรณ์ โปรแกรมจะไม่สามารถทำงานและอาจคอมไพล์ไม่ได้ด้วยซ้ำ"
“แล้วพวกเธอต้องทำยังไง”
"พวกเขาก้าวไปข้างหน้าด้วยการเพิ่มสาขาไปยังที่เก็บ พูดคร่าวๆ นี่หมายความว่าที่เก็บถูกแบ่งออกเป็นสองส่วน ไม่ใช่ตามไฟล์หรือไดเร็กทอรี แต่ตามเวอร์ชัน"
"ลองนึกภาพว่าไฟฟ้าไม่เคยถูกค้นพบและหุ่นยนต์ไม่เคยถูกประดิษฐ์ขึ้น เมื่อนั้นสงครามปลดปล่อยสามครั้งจะไม่เกิดขึ้น และประวัติศาสตร์ของมนุษย์ทั้งหมดจะดำเนินไปตามเส้นทางที่แตกต่างไปจากเดิมอย่างสิ้นเชิง "
"เส้นทางนี้เป็นสาขาทางเลือกของประวัติศาสตร์"
"หรือคุณลองนึกภาพสาขาเป็นสำเนาของที่เก็บก็ได้ กล่าวอีกนัยหนึ่ง ในบางจุด เราสร้างสำเนาของที่เก็บบนเซิร์ฟเวอร์ เพื่อให้นอกเหนือจากที่เก็บหลัก ( มักเรียกว่าลำต้น ) เรามีสาขา อื่น "
“อืม ดูเหมือนจะเข้าใจมากขึ้น
"ทำไมคุณไม่บอกว่าเราคัดลอกที่เก็บ?"
"นี่ไม่ใช่การคัดลอกแบบธรรมดา"
"กิ่งก้านเหล่านี้ไม่เพียงแยกออกจากลำต้นเท่านั้น แต่ยังรวมเข้าด้วยกันด้วย"
"กล่าวอีกนัยหนึ่งคือ งานบางอย่างสามารถทำได้ในสาขา และเมื่อเสร็จสิ้น คุณสามารถเพิ่มสาขาที่เก็บไปยังที่เก็บลำต้นได้"
"ใช่."
“แล้วจะเกิดอะไรขึ้นกับไฟล์”
"ไฟล์จะถูกรวมเข้าด้วยกัน"
"อืม ฟังดูดี ฉันหวังว่ามันจะเจ๋งพอๆ กับการกระทำ"
“แล้วก็บ้าง โอเค เราพักกันเถอะ”
"มีข้อมูลที่เป็นประโยชน์มากมาย ที่นี่ "
GO TO FULL VERSION