🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

วิธีใช้ .gitignore: การจัดการไฟล์ที่ต้องการยกเว้นจากการติดตาม

ในบทความที่ผ่านมา เราได้เรียนรู้การใช้งานพื้นฐานของ Git และ GitHub กันไปแล้ว แต่ในการทำโปรเจกต์จริง เมื่อรันคำสั่ง `git status` คุณเคยเจอปัญหาที่ไฟล์ที่ระบบปฏิบัติการสร้างขึ้นอัตโนมัติ (เช่น `.DS_Store` ของ Mac) หรือข้อมูลที่เป็นความลับเช่นรหัสผ่าน หรือไฟล์ที่เกี่ยวข้องกับ dependency จำนวนมาก (เช่น `node_modules`) แสดงขึ้นมาเต็มไปหมด จนทำให้สับสนว่า "จำเป็นต้องจัดการไฟล์ทั้งหมดนี้เลยเหรอ?" หรือไม่?

ในบทความนี้ เราจะมาอธิบายอย่างละเอียดเกี่ยวกับวิธีใช้ไฟล์ "`.gitignore`" เพื่อยกเว้นไฟล์และโฟลเดอร์ที่ไม่จำเป็นต้องอยู่ภายใต้การจัดการของ Git หรือไม่ควรจะอยู่ ออกจากการติดตามโดยเจตนา การใช้ `.gitignore` อย่างถูกต้องจะช่วยให้ Repository ของคุณสะอาดและสามารถจัดการโปรเจกต์ได้อย่างปลอดภัย


.gitignore คืออะไร? ทำไมต้องยกเว้นไฟล์?

`.gitignore` ตามชื่อของมัน คือไฟล์ข้อความธรรมดาที่ใช้สำหรับระบุรายการไฟล์และโฟลเดอร์ที่ต้องการให้ Git "เพิกเฉย (ignore)" การวางไฟล์นี้ไว้ที่ไดเรกทอรีรากของโปรเจกต์ จะทำให้ Git ไม่นำไฟล์ที่ตรงกับรูปแบบที่ระบุไว้มาแสดงใน `git status` และไม่นำไปเป็นเป้าหมายของ `git add`

แล้วทำไมเราต้องยกเว้นไฟล์ด้วยล่ะ? มีเหตุผลหลักอยู่ 3 ข้อ:


วิธีการเขียนและกฎพื้นฐานของ .gitignore

การเขียน `.gitignore` นั้นง่ายมาก เพียงแค่สร้างไฟล์ชื่อ `.gitignore` ในไดเรกทอรีรากของโปรเจกต์ (ที่เดียวกับโฟลเดอร์ `.git`) แล้วเขียนชื่อไฟล์หรือโฟลเดอร์ที่ต้องการยกเว้นลงไปทีละบรรทัด

ตัวอย่างการเขียนเบื้องต้น:

# บรรทัดที่ขึ้นต้นด้วย '#' จะถือว่าเป็นคอมเมนต์

# ระบุชื่อไฟล์ที่ต้องการยกเว้นโดยตรง
debug.log
config_secret.php

# ยกเว้นทั้งไดเรกทอรี (ใส่หรือไม่ใส่เครื่องหมายทับที่ท้ายก็ได้)
node_modules/
dist

# ยกเว้นไฟล์ทั้งหมดที่มีนามสกุลที่ระบุ
*.log
*.tmp

# กฎข้อยกเว้น: ใช้ '!'
# เพิกเฉยทุกอย่างในไดเรกทอรี logs แต่ให้ติดตาม important.log
logs/
!logs/important.log

สามารถใช้เครื่องหมาย Wildcard (`*`) ได้ ทำให้การตั้งค่ามีความยืดหยุ่น สำหรับรายการไฟล์ที่ควรยกเว้นโดยทั่วไปในทุกโปรเจกต์ คุณสามารถสร้างได้อย่างง่ายดายจากเว็บไซต์อย่าง gitignore.io ซึ่งเป็นประโยชน์อย่างมาก


ปฏิบัติจริง! ขั้นตอนการสร้าง `.gitignore` เพื่อเพิกเฉยไฟล์

ต่อไป เรามาสร้างไฟล์ `.gitignore` จริงๆ แล้วตรวจสอบดูว่าไฟล์ที่ไม่จำเป็นจะถูกเพิกเฉยจากการติดตามหรือไม่

ขั้นตอนที่ 1: สร้างไฟล์ `.gitignore`

ก่อนอื่น ให้สร้างไฟล์ `.gitignore` ในไดเรกทอรีรากของโปรเจกต์ของคุณ เนื่องจากชื่อไฟล์ขึ้นต้นด้วยจุด การสร้างผ่าน GUI ของ File Explorer อาจทำได้ยาก การใช้คำสั่งใน Terminal (หรือ Git Bash) จึงเป็นวิธีที่แน่นอนที่สุด

touch .gitignore

ขั้นตอนที่ 2: ระบุไฟล์และโฟลเดอร์ที่ต้องการยกเว้น

เปิดไฟล์ `.gitignore` ที่สร้างขึ้นด้วย Text Editor แล้วลองเขียนรายการที่มักจะถูกยกเว้นในการพัฒนาเว็บลงไป

# ไฟล์ของ OS / Editor
.DS_Store
.vscode/

# Dependencies
node_modules/

# ไฟล์ Log
*.log
npm-debug.log*

# Environment variables
.env

หลังจากแก้ไขไฟล์แล้ว อย่าลืมบันทึก

ขั้นตอนที่ 3: คอมมิตไฟล์ `.gitignore` เอง

"กฎการยกเว้น" นี้เป็นการตั้งค่าที่สำคัญที่ควรแชร์ให้กับสมาชิกทุกคนในทีม ดังนั้น ไฟล์ `.gitignore` เองก็ควรถูกรวมอยู่ในการจัดการของ Git และทำการคอมมิตด้วย

git add .gitignore

git commit -m "เพิ่มไฟล์ .gitignore"

ขั้นตอนที่ 4: ตรวจสอบการทำงาน

มาดูกันว่าไฟล์จะถูกเพิกเฉยจริงหรือไม่ ลองสร้างไฟล์ชื่อ `debug.log` ซึ่งเราได้ระบุไว้ในรายการที่ต้องเพิกเฉย

echo "This is a debug log." > debug.log

ในสถานะนี้ ลองรันคำสั่ง `git status` ดู

git status

เป็นอย่างไรบ้าง? ไฟล์ `debug.log` จะไม่ปรากฏในรายการ "Untracked files" และจะถูกเพิกเฉยโดยสมบูรณ์ เท่านี้ก็สำเร็จแล้ว!


ข้อควรระวัง: จะทำอย่างไรกับไฟล์ที่คอมมิตไปแล้ว?

สิ่งที่มือใหม่มักพลาดคือ "การคอมมิตไฟล์สำคัญไปแล้ว เพิ่งจะมาเพิ่มชื่อไฟล์ลงใน `.gitignore` ทีหลัง" แต่ `.gitignore` จะมีผลกับไฟล์ที่ยังไม่เคยถูกติดตามโดย Git มาก่อนเท่านั้น

หากคุณต้องการนำไฟล์ที่ถูกติดตามอยู่แล้ว (เช่น `secret-key.php`) ออกจากการจัดการของ Git คุณจำเป็นต้องลบไฟล์นั้นออกจากรายการติดตาม (index) ของ Git ด้วยคำสั่งต่อไปนี้

git rm --cached [ชื่อไฟล์]

คำสั่งนี้ปลอดภัยเพราะไม่ได้ลบไฟล์ออกจาก PC ของคุณ แต่เป็นเพียงการ "นำออกจากรายการติดตามของ Git" เท่านั้น หลังจากรันคำสั่งแล้ว อย่าลืมคอมมิตการเปลี่ยนแปลงนี้พร้อมกับการเปลี่ยนแปลงของ `.gitignore` ด้วย

git commit -m "หยุดการติดตามไฟล์ secret-key.php"