DEV Community

Cover image for Version Control คืออะไรนะ? จากความเข้าใจของ Junior Developer
Kanin James Kearpimy
Kanin James Kearpimy

Posted on

Version Control คืออะไรนะ? จากความเข้าใจของ Junior Developer

Ref: https://www.pexels.com/photo/person-choosing-document-in-folder-4792285/
เคยทำงานเอกสารเพื่อส่งอาจารย์ตรวจ แล้วต้องโดนแก้กลับมากันมั้ยครับ? ซักพัก ก็โดนให้ย้อนกลับไปดูเอกสารฉบับที่ส่งไปเมื่อ 3 วันก่อน ถ้าคนที่่เก็บเอกสารเก่าๆ เอาไว้ ก็จะแบ่งเอกสารเหล่านั้นเป็นเวอร์ชั่นๆ เช่น แก้-ver1 แก้-ver2 แก้-ver[x] ไปเรื่อยๆ

สิ่งนี้เองไม่ได้เกิดกับงานเอกสารเท่านั้น แต่กับงานพัฒนาซอฟต์แวร์ด้วยเช่นกัน การพัฒนาซอฟต์แวร์ สามารถเกิดการเพิ่มเติม แก้ไข เปลี่ยนแปลงตัว Source Code อยู่ตลอดเวลา

แล้วเราจะติดตามการเปลี่ยนแปลงของ Source Code กันได้อย่างไรกัน คงจะไม่ใช่การตั้งชื่อไฟล์เป็น Version กันใช่มั้ยครับ? นั้นเป็นที่มาของคำว่า Version Control

อะไรคือ Version Control ละ?

สั้นๆ Version Control คือเครื่องมือที่ทำให้ Developer ติดตามการเปลี่ยนแปลงที่เกิดขึ้นใน Source Code ของโปรเจคได้ ซึ่งเมื่อติดตามได้ มันจึงทำให้

  • การทำงานระหว่างกลุ่ม Developer ทำได้ง่ายขึ้น เพราะแต่ละคนก็พัฒนาของตัวเอง เมื่อต้องการจะรวมเข้ากับ Source ตรงกลาง ก็ทำการเช็คการเปลี่ยนแปลง (Change) และขอรวม Code version ของตัวเองเข้ามา (Merge)

  • Developer สามารถทราบถึงประวัติการเปลี่ยนแปลง (History Change) และดึง Source Code ตามประวัติกลับมา หากว่า version ปัจจุบันทำให้โปรเจคเสียหายหรือผิดพลาด

  • ทราบว่าใครเป็นผู้สร้างการเปลี่ยนแปลงภายใน source code ทำให้หาผู้เกี่ยวข้องได้ และสามารถช่วยกันแก้ไขปัญหาได้รวดเร็ว (Ideally)

  • Repository หมายถึงโปรเจคหรือที่เก็บ Source Code เอาไว้เป็นที่เดียวกัน โดยใน หนึ่ง Repository อาจจะมี Repository ย่อย (Mono-Repository) เอาไว้อีกด้วย

Ref: https://homes.cs.washington.edu/~mernst/advice/version-control.html#:~:text=Version%20control%20enables%20multiple%20people,interfere%20with%20another%20person's%20work.

Version Control จะแบ่งได้ออกเป็น 2 รูปแบบใหญ่ ได้แก่

  • Centralized Version Control: คือการที่ Repository ถูกรวบรวมไว้ที่ server กลาง ดังนั้นการเปลี่ยนแปลงทั้งหมดจะต้องเชื่อมโยงกับ Repository บน Server เป็นหลัก ตัวอย่างเครื่องมือเช่น Subversion

  • Distributed Version Control: คือการที่ Repository สามารถถูกคัดลอก (copy) ลงไปแต่ละเครื่องของ Developer ได้ และคนอื่นๆ จะไม่สามารถเข้าถึง version ต่างๆ เหล่านั้นได้ จนกว่าเราจะทำการส่ง version ของเราขึ้นไปที่ Repository กลาง เครื่องมือเช่น Git

*โดยในบทความนี้ เราจะพูดถึง Distributed VC ด้วยเครื่องมือ Git เป็นหลัก

Git คืออะไร?

Git คือ Open Source สำหรับจัดการ ติดตาม การเปลี่ยนแปลงภายใน Project ตั้งแต่ขนาดเล็ก ไปจนถึงขนาดใหญ่ โดย Git จะสามารถติดตามการเปลี่ยนแปลงแบ่งเป็น Version ตามรูปด้านล่าง

Ref: https://www.nobledesktop.com/learn/git/git-branches

โดยปกติในหนึ่งโปรเจคจะมีหลาย Features โดยเราจะนิยมเรียก features เหล่านี้ว่า branch โดยในแต่ละ branch ก็จะมี version ที่เกิดจากการพัฒนาปรับปรุงขึ้นมา

เราจะเรียก feature หลักของโปรเจคว่า master หรือ main branch โดยจะทำหน้าที่เป็นตัวหลักในการทำงาน อ้างอิง รวมไปถึงการนำไปใช้งาน (on production) ต่างๆ อีกด้วย

Local & Remote Repository
ปกตินั้น การพัฒนาโปรเจค เราจะมีตัวเก็บ Repository หลักเอาไว้ เพื่อกระจาย อ้างอิง ให้ทุกคนภายในทีมพัฒนา เราจะเรียกว่า Remote Repository ซึ่ง repository ที่ถูกดึง (pull) ลงไปยังเครื่องของคนภายในทีมเพื่อพัฒนาต่อนั้น จะถูกเรียกว่า Local Repository

Image description

ซึ่งแต่ละคนภายในทีม จะยังไม่สามารถเห็นการเปลี่ยนแปลงของสมาชิกได้ หากการเปลี่ยนแปลง (Change) ยังอยู่ที่เครื่อง (Local) ของแต่ละคน โดยเมื่อต้องการเพิ่มเติม source code ให้โปรเจคหลัก เพื่อให้ทุกคนเห็นหรือนำไปใช้ จะต้องทำการส่ง (push) ขึ้นมาที่ Remote Repository ต่อไป

คำสั่ง Git พื้นฐานและ usecase ใช้งาน

เราจะมีพูดถึงคำสั่งพื้นฐานสำหรับการใช้งาน Git ทั้งหมด 5 คำสั่ง ได้แก่ clone, add, commit, push, pull

1.git clone : คือการดึง repository จาก remote ลงมาสู่ local โดยจะมีวิธีทำได้ 2 รูปแบบหลักๆ คือ https และ ssh (จะมีการอธิบายต่อในบทความต่อๆ ไปครับ )

Image description

2.git pull : จะเป็นการดึง code version จาก remote branch ลงมาสู่ local branch เช่นกัน แต่ความแตกต่างคือ จะมีความเจาะจงไปยัง branch มากกว่า

Image description

ตัวอย่าง: เราพัฒนา shopping cart บน local branch จากนั้น เพื่อนได้อัพเดท code บางอย่างเข้า remote branch เดียวกัน เราสามารถ pull code ลงมาเพื่อตรวจสอบหรือใช้งานได้

3.git add : เราต้องเข้าใจก่อนว่า ในการพัฒนา source code บน local branch นั้น เวลาที่มีการเปลี่ยนแปลง ตัว git จะทำงานติดตาม (track) และหากว่าเราต้องการที่จะเก็บการเปลี่ยนแปลงนั้นไว้ แต่ยังไม่แน่ใจว่าจะอัพเดทเวอร์ชั่นใหม่มั้ย เราจะเรียกพื้นที่ตรงนั้นว่า stage change โดยการใช้ git add หมายถึงการนำไฟล์ที่เปลี่ยนแปลงเข้าสู่ stage change นั้นเอง

Image description

4.git commit : จะเป็นคำสั่งที่มักใช้ต่อกับ git add กล่าวคือ เมื่อเรามั่นใจแล้วว่า ต้องการให้การเปลี่ยนแปลงใน source code นั้นอัพเดทเวอร์ชั่นแน่ๆ เราจะทำการย้าย การเปลี่ยนแปลง (change) จาก stange change เข้าสู่ branch history ด้วยการ commit

Image description

5.git push : คือการนำการเปลี่ยนแปลงที่อยู่ใน branch history บน local branch ขึ้นสู่ remote branch เพื่อให้สมาชิกในทีมได้ตรวจสอบหรือนำไปใช้งานต่อไป

Image description

สรุป

Version Control นั้นสามารถช่วยให้การติดตามการเปลี่ยนแปลงของ source กcode ภายในโปรเจคนั้นทำได้ง่าย ซึ่งก่อให้เกิดการพัฒนาเป็นทีมได้อย่างเป็นระบบ เกิดขึ้นพร้อมกันได้ ตั้งแต่โปรเจคขนาดเล็ก - ขนาดใหญ่ได้

ในบทความต่อไป เราจะมาลงมือติดตั้ง git โดยใช้ github เป็น remote repository และทดลองใช้งานคำสั่งต่างๆ จากด้านบน และที่มีเพิ่มเติมกันครับ :)

อ้างอิงและขอบคุณ (Appreciate & Reference)

Top comments (0)