Git Fundamentals
Git vs GitHub / GitLab
แยกแยะ Git ในฐานะ distributed version control ที่ทำงาน local ได้ครบ ออกจาก GitHub/GitLab ในฐานะแพลตฟอร์ม hosting ที่เพิ่มการทำงานร่วมกันเป็นทีมเข้ามาบน Git
1) ปัญหา: Git กับ GitHub เป็นของเดียวกันหรือเปล่า
เพื่อนร่วมทีมบอกคุณว่า "push โค้ดขึ้น GitHub ด้วยนะ" แต่ก่อนหน้านี้คุณเพิ่งเรียนรู้จักคำว่า Git จากสองบทที่แล้ว คุณเลยสงสัยว่า Git กับ GitHub เป็นโปรแกรมเดียวกันไหม ต้องมีบัญชี GitHub ก่อนถึงจะใช้ Git ได้หรือเปล่า คำตอบคือไม่ใช่ของเดียวกัน และไม่จำเป็นต้องมีบัญชีที่ไหนเลยก็ใช้ Git ได้ตั้งแต่บทที่แล้ว (What is Git) — สองบทที่ผ่านมาพูดถึง Git ในฐานะระบบที่บันทึก repository, snapshot, และ history ทั้งหมดนี้เกิดขึ้นบนเครื่องของคุณเองล้วน ๆ โดยไม่ต้องพึ่งอินเทอร์เน็ตหรือบริการภายนอกใด ๆ
- สงสัยว่าต้องสมัครบัญชี hosting platform ก่อนถึงจะเริ่มใช้ Git ได้หรือไม่
- ไม่แน่ใจว่า repository ที่เรียนไปในบทก่อนอยู่ที่เครื่องเราหรืออยู่บนอินเทอร์เน็ต
- สับสนว่าคำสั่งอย่าง commit หรือ history เป็นความสามารถของ Git เองหรือของแพลตฟอร์ม
2) Core Model: Git คือเครื่องมือ, GitHub/GitLab คือแพลตฟอร์มที่สร้างขึ้นบน Git
Git คือ Distributed Version Control System (DVCS) — ระบบควบคุมเวอร์ชันแบบกระจายศูนย์ที่ทำงานทั้งหมดบนเครื่องของคุณเอง คำว่า "distributed" หมายความว่าทุกเครื่องที่มี repository นั้นอยู่ ต่างก็มีประวัติ (history) ครบชุดของตัวเองอยู่แล้ว ไม่ต้องเชื่อมต่อกับเซิร์ฟเวอร์กลางเพื่อทำงานพื้นฐาน เช่น สร้าง commit หรือดู history ย้อนหลัง GitHub และ GitLab (รวมถึงแพลตฟอร์ม hosting อื่น ๆ ในลักษณะเดียวกัน) ไม่ใช่ Git — แต่เป็น "แพลตฟอร์ม hosting" ที่บริษัทต่าง ๆ สร้างขึ้นมาครอบ Git อีกที เพื่อให้ทีมงานหลายคนอัปโหลด repository ของตัวเองไปเก็บไว้ในที่เดียวกัน และเพิ่มเครื่องมือสำหรับการทำงานร่วมกันที่ Git เองไม่มีให้
3) Anatomy: อะไรที่ Git ทำเองได้ กับอะไรที่แพลตฟอร์ม hosting เพิ่มเข้ามา
ทุกคำสั่งที่เรียนไปแล้ว (การติดตามการเปลี่ยนแปลง, การบันทึก snapshot, การดู history) เป็นความสามารถของ Git เอง ทำงานได้ครบถ้วนโดยไม่ต้องเชื่อมอินเทอร์เน็ตแม้แต่ครั้งเดียว คุณสามารถใช้ Git คนเดียวไปตลอดโดยไม่เคยแตะแพลตฟอร์ม hosting เลยก็ได้ สิ่งที่แพลตฟอร์ม hosting อย่าง GitHub หรือ GitLab เพิ่มเข้ามาคือความสามารถระดับทีม ที่ Git เพียงอย่างเดียวไม่มีให้: ที่เก็บ repository กลางให้หลายคนเข้าถึงร่วมกัน, กระบวนการรีวิวโค้ดก่อน merge (Pull Request หรือ Merge Request), ระบบติดตามงาน (Issue), และระบบรันงานอัตโนมัติ (CI/CD) เมื่อมีการเปลี่ยนแปลงเข้ามา ลองทำนายก่อนอ่านต่อ: ถ้าอินเทอร์เน็ตของคุณหลุดกะทันหันระหว่างทำงาน คุณจะยังบันทึก snapshot ใหม่หรือดู history เก่าของโปรเจกต์ได้หรือไม่? คำตอบคือได้ เพราะ Git ทำงานบนเครื่องของคุณเองทั้งหมด สิ่งที่ทำไม่ได้ตอนอินเทอร์เน็ตหลุดคือการส่ง (push) หรือรับ (pull) ข้อมูลไปมากับแพลตฟอร์ม hosting เท่านั้น — เพราะนั่นเป็นความสามารถของแพลตฟอร์ม ไม่ใช่ของ Git เอง
4) Contrast: สิ่งที่ Git ทำเองได้ เทียบกับสิ่งที่แพลตฟอร์ม hosting เพิ่มเข้ามา
Git อย่างเดียว เทียบกับ Git + แพลตฟอร์ม hosting
Git ทำงาน local ได้ครบ ไม่ต้องมีอินเทอร์เน็ต
การติดตามไฟล์ บันทึก snapshot และดู history เป็นความสามารถของ Git เอง ทำงานได้แม้ไม่เชื่อมต่ออินเทอร์เน็ต
แพลตฟอร์ม hosting เพิ่มที่เก็บกลางให้ทีม
GitHub/GitLab ให้ที่เก็บ repository ที่ทุกคนในทีมเข้าถึงร่วมกันได้ผ่านอินเทอร์เน็ต ซึ่ง Git เองไม่มีแนวคิดนี้ในตัว
Pull/Merge Request และ Issue เป็นของแพลตฟอร์ม ไม่ใช่ของ Git
กระบวนการรีวิวโค้ดก่อน merge และระบบติดตามงาน เป็นเครื่องมือที่แพลตฟอร์ม hosting สร้างเพิ่มขึ้นมา Git เองไม่มีคำสั่งเหล่านี้
อย่าเข้าใจผิดว่าต้องมีบัญชี hosting ถึงจะเริ่มใช้ Git ได้
Git ใช้งานคนเดียวบนเครื่องได้ทันทีหลังติดตั้ง ไม่ต้องสมัครบัญชีหรือเชื่อมแพลตฟอร์มใด ๆ ก่อน
5) Checkpoint & Next Steps
ทดสอบความเข้าใจ: Git vs GitHub / GitLab
ตอบคำถามเพื่อเช็กความเข้าใจความต่างระหว่าง Git กับแพลตฟอร์ม hosting
ข้อใดอธิบายความสัมพันธ์ระหว่าง Git กับ GitHub/GitLab ได้ถูกต้องที่สุด?
ข้อใดคือความสามารถที่แพลตฟอร์ม hosting เพิ่มเข้ามา ซึ่ง Git เองไม่มี?
Git เป็นระบบควบคุมเวอร์ชันที่ทุกเครื่องมีประวัติครบชุดของตัวเอง ไม่ต้องพึ่งเซิร์ฟเวอร์กลางเพื่อทำงานพื้นฐาน — คุณสมบัตินี้เรียกว่าอะไร (ภาษาอังกฤษ)?
ตอบเป็นคำคุณศัพท์ภาษาอังกฤษคำเดียวตามที่ใช้ในบทเรียน
- Git คือ Distributed Version Control System ที่ทำงาน local ได้ครบ ไม่ต้องมีอินเทอร์เน็ต
- GitHub/GitLab คือแพลตฟอร์ม hosting ที่สร้างขึ้นบน Git เพื่อเพิ่มการทำงานร่วมกันเป็นทีม
- Pull/Merge Request, Issue, และ CI/CD เป็นของแพลตฟอร์ม ไม่ใช่ของ Git เอง
- ก้าวต่อไป: บทถัดไปคือ Install Git ซึ่งพาไปติดตั้ง Git จริงบนเครื่องของคุณ โดยอาศัยความเข้าใจจากบทนี้ว่า Git เป็นเครื่องมือที่ติดตั้งและใช้งานบนเครื่องได้เองโดยไม่ต้องพึ่งแพลตฟอร์ม hosting ใด ๆ ก่อน