[Dev Tip] Version Control มันคืออะไร ? แล้วมันดียังไง ?

Version Control มันคืออะไร ?

มาถึงก็เข้าเรื่องเลย จริง ๆ แล้วตัว Version Control มันก็แปลตามชื่อมันเลย มันคือตัวควบคุมเวอร์ชั่น มันทำหน้าที่ตรวจสอบว่า แต่ล่ะครั้งที่เราเปลี่ยนแปลง Source Code ของเรา อะไรมันเปลี่ยนไปบ้าง (Snapshot) แล้วเก็บความเปลี่ยนแปลงนั้น แล้วตั้งเป็น Version ไปเรื่อย ๆ คล้าย ๆ กับเรากด Save แล้ว Copy ไปไว้ที่อื่นเหมือนที่เมื่อก่อนเราทำกันนี่แหละ
ย้อนไปเมื่อตอนที่พวกเรายังเขียนโปรแกรมกันใหม่ ๆ อยู่ พวกเรารู้ว่า Code พลาดบรรทัดเดียว เปลี่ยนชีวิตเราได้เลย เพราะฉะนั้น อารมณ์เหมือน เราจะได้ตายด้วยน้ำมือตัวเองเข้าสักวัน วิธีแก้ของเราเมื่อก่อนก็คือ จับ Copy ไปที่อื่นซะเลย เราก็ทำแบบนี้ไปเรื่อย ๆ แต่พอเราทำไปเรื่อย ๆ นี่แหละ เราก็อาจจะลืมว่า ตรงที่เรา Copy ไว้ตอนนั้นเราเขียนถึงตรงไหนแล้ว เราแก้อะไรไปบ้างหว่า
หลังจากที่เรา Backup ไว้เยอะ ๆ เข้าชื่อ Folder อาจจะมีแค่ วันที่ หรืออะไรก็ตาม แต่มันก็บอกไม่ได้ว่าข้างในมันมีอะไรบ้าง (ลำพังแค่จะจำตัวโครงสร้างของตัวโปรแกรมที่เราออกแบบเองยังไม่ได้เลย) มันก็ไม่ต่างอะไรกับขยะที่รกอยู่ใน HDD เราเลย ต่อมาเลยมีโปรแกรมเมอร์คนนึงก็เห็นปัญหานี้ และบอกว่า ก็สร้างโปรแกรมมาควบคุมซะสิ เขาเลยเขียนโปรแกรมที่คอยเก็บการเปลี่ยนแปลงของ Source Code ลงใน DB ซึ่งนั่นก็ทำให้ชีวิตของโปรแกรมเมอร์สมัยนั้นดีขึ้นเยอะมาก ๆ
แต่ ๆ อุบัติเหตุก็เกิดขึ้นได้เสมอ เมื่อ HDD ที่ใช้เก็บ CVS พัง ทำให้ตัว Source Code และ History หายวับไปกับตา น้ำตาซึม กรี๊ดร้อง กันเลยทีเดียว จากนั้นก็มีโปรแกรมเมอร์หัวใสอีกคนบอกว่า งั้นก็เก็บมันไว้ทั้ง Server และ Client มันเลยล่ะกัน มันคงไม่พังพร้อม ๆ กันหมดทีเดียวหรอก นี่เลยเป็นจุดเริ่มต้นของ Git ที่เราใช้กันอยู่ถึงทุกวันนี้
ซึ่งแน่นอนว่า ในปัจจุบันนี้ Version Control ที่ส่วนใหญ่จะใช้กันนั่นก็คือ Git เพราะว่าตัว Source Code จะถูกเก็บทั้งที่ Client และ Server ทำให้ปลอดภัยมากขึ้น ลดความเสี่ยงที่ตัว Source Code จะหายไปเพราะอุบัติเหตุ

ที่เล่า ๆ มามันดียังไงเนี่ย ?

อย่างที่บอกว่า พวก Version Control มันจะคอยเก็บการเปลี่ยนแปลงของ Source Code เราเอาไว้ ถ้าสมมุติว่า เราเกิดแก้ Source Code อยู่แล้วมันเกิด เจ๊ง ขึ้นมา เราก็สามารถ Restore กลับไปตอนที่ยังไม่พังได้ด้วย
กับอีกเหตุผลนึง ถ้าเราทำงานเป็นทีม แล้วตัว Version Control มันจะช่วยทำให้เราทำงานกับทีมได้ง่ายขึ้น มันสามารถบอกว่าได้ว่า ตรงนี้ถูกเปลี่ยนแล้วนะ ใครเป็นคนแก้ แก้เมื่อไหร่ แล้วแก้เพื่ออะไร ตัว Source Code ก็จะถูก Sync กับตัว Server ตลอดเวลา ทำให้มั่นใจได้ว่า Source Code ที่เราทำงานอยู่เป็น Version ล่าสุดแน่นอน
สุดท้ายนี้ก็ขึ้นอยู่กับว่า เราจะจัดการกับ Source Code ของเรายังไง จะ Copy ไปที่อื่นเรื่อย ๆ เปลือง HDD ก็ไม่มีใครว่า หรือจะเลือกใช้ Version Control ดั่งโปรแกรมเมอร์ที่เจริญแล้วก็ได้เหมือนกัน ก็ไม่มีใครว่าอีกเช่นกัน