Coding Gun

Git คืออะไรและใช้งานยังไง?

Software Version Control มีไว้ทำไม?

การทำงานที่มี developer มากกว่า 1 คนจำเป็นต้องมี version control เพราะเราต้องการ track การเปลี่ยนแปลงของ source code จะได้มั่นใจได้ว่า code ที่เราเขียนไม่ไปทับ code ของคนอื่น และนอกจากนี้ git ยังช่วยให้เราสามารถแยกทีมพัฒนาตามแต่ละ feature และ version ของ software ได้ง่ายขึ้น

Git คืออะไร?

Git คือเครื่องมือที่ใช้ในการจัดการ version ของ source code ซึ่งการทำ Version control จะช่วยให้เราสามารถพัฒนา software หลายๆ version พร้อมๆกันและสามารถย้อนกลับไปยัง version หรือ release ก่อนหน้าได้

ในปัจจุบันเราจะเห็นการนำ Git ไปใช้กับงานเอกสารกันมากขึ้น

ประเภทของ Software Version Control

Git vs SVN(Subversion)

Git เป็น distributed version control จะต่างจาก SVN ที่เป็น Client-Server version control ตรงที่ git จะสามารถแตก branch หรือจัดการกับ conflict ได้ที่ฝั่ง client เลย ทำให้ปัญหาจะน้อยกว่า SVN เยอะมาก

Version control ไม่ใช่การ Backup

การที่เราต้องมี Version Control ส่วนหนึ่งคือเราต้องการย้อนเวลากลับไปใน Version ก่อนหน้าได้ ซึ่งนั่นจะเหมือนกับการ Backup แต่ Version control นั้นจะสามารถพัฒนาหลาย version(หรือหลาย edition เช่น version free กับไม่ฟรี) ไปพร้อมๆกันได้

Git Branching

Git หรือ version control เป็นมากกว่าการ Backup

Remote repository คืออะไร?

เนื่องจาก git เป็น distributed version control ดังนั้น ต่้องมี server ที่ทำหน้าที่เป็น remote repository ไม่งั้นจะมีแค่ git ที่ทำหน้าที่เป็น repository ที่ทำงานฝั่ง client-side เท่านั้น

ซึ่งทางเลือกของ remote repository ที่ได้รับความนิยมมากๆในตอนนี้มีอยู่ 4 ตัว ลองตามอ่านได้ในบทความนี้

Git ทำงานยังไง?

การที่เราจะใช้งาน Git ได้อย่างราบรื่นจำเป็นต้องมีความเข้าใจขั้นตอนการทำงานของ Git ก่อน โดยการทำงานของ Git นั้นจะเป็นการ track การเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์และจะบันทึกการเปลี่ยนแปลงนั้นไว้ ดังนั้นเพื่อให้เห็นภาพการทำงานของ git เราจะแบ่งออกเป็นการทำงานออกเป็น 3 ขั้นตอนดังนี้

  1. Work Area เป็นการทำงานในขั้นตอนแรกเลยคือเรายังไม่มีการ add ไฟล์ใดๆเข้ามาเลยในขั้นตอนนี้จะยังไม่มีความเกี่ยวข้องใดกับ Git เลย สถานะของไฟล์จะเป็น untracked

    Git add

  2. Index หลังจากที่เราสั่ง git add ไฟล์นั้นจะถูก track การเปลี่ยนแปลง สถานะของไฟล์จะเปลี่ยนเป็น staged แต่การเปลี่ยนแปลงนั้นยังไม่ได้ถูกเก็บลงใน repository เราจึงต้องสั่ง git commit เพื่อเข้าสู่ขั้นตอนถัดไป

    Git commit

  3. Repository ในขั้นตอนนี้ Code ของเราจะถูกบันทึกการเปลี่ยนแปลงเก็บไว้ใน repository แต่ยังอยู่แค่ในเครื่องของ developer เท่านั้น หลังจากนี้เราจะต้องส่งการเปลี่ยนแปลงนี้ขึ้นไปบน remote repository บน server ด้วยคำสั่ง git push

Git workflow
ที่ม่า: https://docs.gitlab.com/ee/topics/gitlab_flow.html

ในทุกๆวันของการทำงานเราเลยต้องใช้คำสั่งแบบนี้

git add .
git commit -m "message"
git push origin dev

Check status ของไฟล์

เราจะทำการ check status ของไฟล์ด้วยคำสั่ง

git status # หรือ git status -s

ซึ่งผลลัพธ์ที่แสดงออกมาประมาณนี้

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    README

nothing added to commit but untracked files present (use "git add" to track)

โดยจะแบ่งออกเป็นสถานะต่างๆ ดังรูป

Git Status
ที่มา: https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository

ในรูปจะเป็นการอธิบาย Status ของไฟล์ตั้งแต่ก่อนเข้า Git ไปจนถึงเข้าไปใน repositoroy แล้วเรียบร้อย โดยจะเริ่มจาก

  1. ตอนที่เรา new file ใหม่เข้ามาจากการสร้างใหม่หรือ copy มาวางก็ตาม stage ของไฟล์จะเป็น untracked
  2. หลังจากที่เราแก้ไขไฟล์ที่สร้างขึ้นมาใหม่นี้จนพอใจเราก็จะใช้ git add เพื่อเปลี่ยน status เป็น staged
  3. และหลังจากที่เราทำการ commit ไฟล์เข้าสู่ repository แล้ว status ของไฟล์จะเปลี่ยนเป็น unmodified ทันที เป็นการบอกว่า git รู้จักไฟล์นี้แล้วนะ
  4. เมื่อไฟล์ถูกเปลี่ยนเป็น unmodified เรียบร้อยแล้วหลังจากนี้ตอนที่เราทำการแก้ไขไฟล์นี้ status จะเปลี่ยนเป็น modified ซึ่งจะไม่กลับไปที่ untracked เหมือนตอนแรก เพราะ git รู้จักไฟล์นี้แล้ว
  5. ส่วนถ้าเราทำการ remove ไฟล์ออกจาก repository ด้วยคำสั่งด้านล่าง status ของไฟล์จะเปลี่ยนกลับไปที่ untracked เหมือนเดิม
git rm --cached

อ่านต่อเพิ่มเติมได้ที่นี่

Phanupong Permpimol
Follow me