Version Control ด้วย Git: ทำงานร่วมกันอย่างราบรื่น
ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการใช้ Package Managers เพื่อจัดการ Dependencies ของโปรเจกต์เราให้เป็นระเบียบเรียบร้อย แต่เมื่อเราทำงานเป็นทีมหรือต้องการเก็บประวัติการเปลี่ยนแปลงของโค้ด การใช้แค่ Package Managers อาจไม่เพียงพอ นั่นคือเหตุผลที่เราต้องรู้จักกับ Version Control และ Git
ความสำคัญของ Version Control
ลองนึกภาพว่าคุณกำลังพัฒนาเว็บไซต์กับเพื่อนร่วมงานหลายคน ทุกคนแก้ไขไฟล์เดียวกันพร้อมๆ กัน โดยไม่มีระบบควบคุมการเปลี่ยนแปลงที่ชัดเจน ผลลัพธ์ที่ได้อาจเป็นหายนะ! โค้ดที่เคยทำงานได้ดีอาจพังเพราะการแก้ไขของคนอื่น หรืออาจเกิดความสับสนว่าโค้ดเวอร์ชันไหนคือเวอร์ชันล่าสุดกันแน่
Version Control ช่วยแก้ปัญหาเหล่านี้ได้ โดยเป็นระบบที่:
- ติดตามการเปลี่ยนแปลง: บันทึกทุกการแก้ไขไฟล์ ทำให้เราสามารถย้อนกลับไปยังเวอร์ชันก่อนหน้าได้
- ทำงานร่วมกันอย่างราบรื่น: ช่วยให้หลายคนสามารถทำงานบนโค้ดชุดเดียวกันได้ โดยไม่ขัดแย้งกัน
- สำรองข้อมูล: เก็บประวัติการเปลี่ยนแปลงทั้งหมด ทำให้เราสามารถกู้คืนข้อมูลได้ในกรณีที่เกิดข้อผิดพลาด
Version Control เปรียบเสมือนเครื่อง Time Machine สำหรับโค้ดของเรา ช่วยให้เราเดินทางไปในอดีตเพื่อแก้ไขปัญหาหรือเรียนรู้จากความผิดพลาดได้
Git คืออะไรและทำงานอย่างไร
Git เป็น Version Control System (VCS) ที่ได้รับความนิยมมากที่สุดในโลก ถูกสร้างขึ้นโดย Linus Torvalds ผู้สร้าง Linux Kernel Git เป็น Distributed Version Control System (DVCS) หมายความว่าทุกคนที่ทำงานในโปรเจกต์จะมีสำเนาของ repository ทั้งหมดอยู่ในเครื่องของตัวเอง ทำให้สามารถทำงานแบบออฟไลน์และทำงานร่วมกันได้อย่างมีประสิทธิภาพ
โครงสร้างของ Git
Git มีโครงสร้างหลักๆ 3 ส่วน:
- Working Directory: คือโฟลเดอร์ที่เราทำงานอยู่ ซึ่งเป็นสำเนาของไฟล์ในโปรเจกต์
- Staging Area (Index): คือพื้นที่พักไฟล์ที่เราต้องการ commit (บันทึกการเปลี่ยนแปลง)
- Repository (.git directory): คือฐานข้อมูลที่เก็บประวัติการเปลี่ยนแปลงทั้งหมดของโปรเจกต์
การทำงานของ Git คือการย้ายไฟล์ระหว่าง Working Directory, Staging Area และ Repository
ขั้นตอนการทำงานของ Git
โดยทั่วไป ขั้นตอนการทำงานของ Git จะเป็นดังนี้:
- แก้ไขไฟล์ใน Working Directory: แก้ไขโค้ด, เพิ่มไฟล์ใหม่, หรือลบไฟล์
- Staging Changes: เพิ่มไฟล์ที่ต้องการ commit ไปยัง Staging Area โดยใช้คำสั่ง
git add - Commit Changes: บันทึกการเปลี่ยนแปลงจาก Staging Area ไปยัง Repository โดยใช้คำสั่ง
git commit - Push Changes (optional): ส่งการเปลี่ยนแปลงจาก Repository ในเครื่องของเราไปยัง Repository บน Server (เช่น GitHub, GitLab) โดยใช้คำสั่ง
git push - Pull Changes (optional): ดึงการเปลี่ยนแปลงจาก Repository บน Server มายัง Repository ในเครื่องของเรา โดยใช้คำสั่ง
git pull
คำสั่ง Git พื้นฐาน
ต่อไปนี้คือคำสั่ง Git พื้นฐานที่เราควรรู้จัก:
1. git init
สร้าง Git repository ใหม่ในโฟลเดอร์ปัจจุบัน
git init
กรณีใช้งานจริง: เมื่อเริ่มโปรเจกต์ใหม่ หรือต้องการเพิ่ม Version Control ให้กับโปรเจกต์ที่มีอยู่
ข้อผิดพลาดที่พบบ่อย: รันคำสั่งนี้ซ้ำในโฟลเดอร์ที่มี .git อยู่แล้ว (ไม่มีผลเสียร้ายแรง)
2. git add
เพิ่มไฟล์ไปยัง Staging Area
git add . # เพิ่มทุกไฟล์ที่เปลี่ยนแปลง
git add filename.txt # เพิ่มไฟล์เดียว
กรณีใช้งานจริง: หลังจากแก้ไขไฟล์แล้ว ต้องการเตรียมไฟล์เหล่านั้นเพื่อ commit
ข้อผิดพลาดที่พบบ่อย: ลืมรันคำสั่งนี้ก่อน commit ทำให้การเปลี่ยนแปลงไม่ถูกบันทึก
3. git commit
บันทึกการเปลี่ยนแปลงจาก Staging Area ไปยัง Repository พร้อมข้อความอธิบาย
git commit -m "Add feature: implement user authentication"
กรณีใช้งานจริง: หลังจาก staging ไฟล์แล้ว ต้องการบันทึกการเปลี่ยนแปลงเป็นเวอร์ชันใหม่
ข้อผิดพลาดที่พบบ่อย: ลืมใส่ข้อความอธิบาย (commit message) หรือใส่ข้อความที่ไม่สื่อความหมาย
4. git status
แสดงสถานะของ Working Directory และ Staging Area
git status
กรณีใช้งานจริง: ต้องการตรวจสอบว่าไฟล์ไหนถูกแก้ไข, staging หรือยัง, หรือมีอะไรที่ยังไม่ได้ commit
ข้อผิดพลาดที่พบบ่อย: ไม่ได้ใช้คำสั่งนี้ก่อน commit ทำให้ไม่ทราบว่ามีการเปลี่ยนแปลงอะไรบ้าง
5. git push
ส่งการเปลี่ยนแปลงจาก Repository ในเครื่องของเราไปยัง Repository บน Server (เช่น GitHub, GitLab)
git push origin main # ส่งไปยัง branch 'main' ของ remote repository 'origin'
กรณีใช้งานจริง: ต้องการแชร์การเปลี่ยนแปลงของเราให้คนอื่นเห็น หรือสำรองข้อมูลโค้ดไว้บน Server
ข้อผิดพลาดที่พบบ่อย: ยังไม่ได้ตั้งค่า remote repository หรือ branch ที่จะ push ไป
6. git pull
ดึงการเปลี่ยนแปลงจาก Repository บน Server มายัง Repository ในเครื่องของเรา
git pull origin main # ดึงข้อมูลจาก branch 'main' ของ remote repository 'origin'
กรณีใช้งานจริง: ต้องการรับการเปลี่ยนแปลงจากเพื่อนร่วมงาน หรืออัปเดตโค้ดในเครื่องของเราให้เป็นเวอร์ชันล่าสุด
ข้อผิดพลาดที่พบบ่อย: เกิด conflict เมื่อมีการแก้ไขไฟล์เดียวกันทั้งบน Server และในเครื่องของเรา
ตัวอย่างการใช้งาน Git แบบ Step-by-Step
- สร้างโฟลเดอร์โปรเจกต์:
- เริ่มต้น Git repository:
- สร้างไฟล์ index.html:
- Staging ไฟล์ index.html:
- Commit การเปลี่ยนแปลง:
- (Optional) สร้าง repository บน GitHub/GitLab และเชื่อมต่อกับ local repository: (สมมติว่า remote repository ชื่อ 'origin' และ branch ชื่อ 'main')
- แก้ไขไฟล์ index.html:
- Staging และ Commit การเปลี่ยนแปลง:
- Push การเปลี่ยนแปลงไปยัง remote repository:
mkdir my-website
cd my-website
git init
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
git add index.html
git commit -m "Add initial HTML file"
git remote add origin <URL_ของ_repository>
git push origin main
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
</head>
<body>
<h1>Welcome to my website!</h1>
<p>This is a simple website built with HTML.</p>
</body<
/html>
git add index.html
git commit -m "Update index.html with welcome message"
git push origin main
แค่นี้เราก็สามารถใช้ Git เพื่อติดตามการเปลี่ยนแปลงและทำงานร่วมกับผู้อื่นได้อย่างราบรื่นแล้ว!
ข้อควรจำ: Git เป็นเครื่องมือที่ทรงพลังและมีคำสั่งอีกมากมายให้เรียนรู้ แต่คำสั่งพื้นฐานเหล่านี้จะช่วยให้คุณเริ่มต้นใช้งาน Git ได้อย่างง่ายดาย
ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับเครื่องมือต่างๆ ที่ช่วยให้นักพัฒนาเว็บทำงานได้ง่ายขึ้น เช่น Text Editors, IDEs และ DevTools