Tutorial

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

By Arnon Puitrakul - 27 มิถุนายน 2015

[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 ดั่งโปรแกรมเมอร์ที่เจริญแล้วก็ได้เหมือนกัน ก็ไม่มีใครว่าอีกเช่นกัน

Read Next...

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

Monitor การทำงาน MySQL ด้วย Prometheus และ Grafana

นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

เสริมความ"แข็งแกร่ง" ให้ SSH ด้วย fail2ban

จากตอนที่แล้ว เราเล่าในเรื่องของการ Harden Security ของ SSH Service ของเราด้วยการปรับการตั้งค่าบางอย่างเพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ หากใครยังไม่ได้อ่านก็ย้อนกลับไปอ่านกันก่อนเด้อ วันนี้เรามาเล่าวิธีการที่มัน Advance มากขึ้น อย่างการใช้ fail2ban...