Skip to content

Version Control คืออะไร?

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

ทำไม Version Control ถึงสำคัญ?

ผมจะมี checklist ที่ช่วยให้คุณเข้าใจว่าทำไม Version Control ถึงสำคัญ และทำไมคุณควรใช้มัน ลองอ่านแล้วคิดตามดูนะครับ

คุณเคยแก้ไขโค้ดไปเรื่อย ๆ จนโปรแกรมทำงานผิดพลาด แล้วไม่สามารถกด undo ( ctrl/cmd + z ) เพื่อย้อนกลับไปที่เวอร์ชันก่อนหน้าได้ไหม

คุณเคยทำงานร่วมกับคนอื่น ๆ แล้วเกิดปัญหาเรื่องโค้ดที่คุณเขียนไปมันดันไปทับซ้อนกับโค้ดที่คนอื่นเขียนไปไหม

คุณเคยเผลอลบไฟล์ผิดไป แล้วไม่สามารถกู้คืนได้ไหม

ตอนที่คุณทำงานกับเพื่อนร่วมงาน คุณเคยสงสัยไหมว่าใครเป็นคนเพิ่ม bug ลงไปในโปรแกรมของพวกคุณ

จาก checklist ข้างต้น ถ้าคุณตอบว่า "ใช่" กับข้อใดข้อหนึ่ง หรือทั้งหมด โปรดจงรู้ไว้ว่าคุณควรใช้ Version Control System (VCS) ได้แล้ว! เพราะการใช้ VCS จะช่วยให้คุณสามารถแก้ไขหรือลดปัญหาเหล่านี้ได้อย่างมีประสิทธิภาพนั่นเอง

แล้ว VCS มีกี่ประเภทล่ะ?

Local Version Control Systems

  • เก็บประวัติการเปลี่ยนแปลงของไฟล์ไว้บน local machine เท่านั้น
  • ไม่สามารถแชร์หรือทำงานร่วมกับผู้อื่นได้
  • ยกตัวอย่าง เช่น RCS

Local version control diagram

Local version control diagram by Git

Centralized Version Control Systems

  • มีเซิร์ฟเวอร์กลางสำหรับเก็บประวัติการเปลี่ยนแปลงไฟล์ และมีการควบคุมการเข้าถึง
  • ผู้ใช้ต้องเชื่อมต่อกับเซิร์ฟเวอร์กลางเสมอเพื่อส่งหรือรับไฟล์
  • หากเซิร์ฟเวอร์กลางล่ม ผู้ใช้จะไม่สามารถทำงานต่อได้
  • ยกตัวอย่าง เช่น CVS, Subversion

Centralized version control diagram

Centralized version control diagram by Git

Distributed Version Control Systems

  • ไม่จำเป็นต้องมีเซิร์ฟเวอร์กลาง เพราะทุกคนมี mirror ของ repo เก็บไว้ใน local machine อยู่แล้ว
  • สามารถทำงานแบบ offline ได้และยังคงมีประวัติการเปลี่ยนแปลงไฟล์ทั้งหมด
  • หากเซิร์ฟเวอร์ล่ม ทุกคนก็ยังสามารถทำงานต่อไปได้ และถ้าเซิร์ฟเวอร์กลับมาทำงานได้แล้ว ทุกคนก็สามารถ sync ข้อมูลกลับไปได้ โดยไม่ต้องกังวลว่าข้อมูลจะสูญหาย
  • ยกตัวอย่าง เช่น Git⭐️, Mercurial

Distributed version control diagram

Distributed version control diagram by Git

อ่านเพิ่มเติม