ไม่มีชื่อบทความ
คู่มือใช้งานไฟล์ .gitignore อย่างมืออาชีพ
1. บทนำ
วัตถุประสงค์ของ .gitignore
ไฟล์ .gitignore มีไว้บอก Git ว่าไฟล์หรือโฟลเดอร์ใดบ้างที่ไม่ต้องติดตาม (ignore) การเปลี่ยนแปลง เพื่อไม่ให้ไฟล์เหล่านี้ถูก push ขึ้นไปบน remote repository
ประโยชน์:
- ลดขนาด repo
- ป้องกันข้อมูลสำคัญหรือไฟล์ลับรั่วไหล
- ลดปัญหา merge conflict ของไฟล์ชั่วคราว
2. ตำแหน่งและลำดับความสำคัญ
ระดับโปรเจกต์:
- วางไว้ที่ราก repo (
/) จะมีผลทั้ง repo
ภายใน sub-folder:
- ใช้เพื่อ ignore เฉพาะไฟล์ในโฟลเดอร์ย่อยนั้น ๆ เท่านั้น
ระดับเครื่อง (Global):
- วางที่
~/.config/git/ignoreหรือ~/.gitignore_globalมีผลทุก repo ในเครื่องนั้น ๆ เหมาะกับไฟล์จาก IDE หรือ OS
3. ไวยากรณ์พื้นฐานของ .gitignore
จับคู่ Path:
logs/debug.log
Wildcards:
*.log # จับคู่ทุกไฟล์ที่ลงท้ายด้วย .log
cache/? # จับคู่ cache/a, cache/b แต่ไม่จับคู่ cache/ab
ไดเรกทอรี: (ลงท้ายด้วย /)
node_modules/
ยกเว้น (negation):
node_modules/
!node_modules/package-that-should-be-tracked/
คำสั่ง comment:
# ไม่ต้องติดตามไฟล์ .env
.env
4. ลำดับการประเมินกฎ (Rule precedence)
.gitignoreใน sub-folder มีลำดับความสำคัญสูงกว่าในระดับบน- กฎที่อยู่ล่างสุดจะ override กฎด้านบน
ตัวอย่าง:
*.log
!important.log
important.log จะถูก track แม้จะจับคู่กับ *.log
5. ตัวอย่างแพตเทิร์นที่พบบ่อย
ภาษาทั่วไป:
node_modules/
dist/
*.log
IDE/Editor:
.vscode/
.idea/
ระบบปฏิบัติการ:
.DS_Store
Thumbs.db
ภาษาหรือเครื่องมือเฉพาะ:
.next/
.turbo/
coverage/
6. การสร้าง .gitignore อัตโนมัติ
- ใช้เว็บไซต์ gitignore.io
- ใช้ template จาก GitHub เมื่อสร้าง repo
- ใช้คำสั่งสร้างโปรเจกต์ เช่น
pnpm create,npx create-next-app
7. แนวทางปฏิบัติที่ดี (Best Practices)
- Commit ไฟล์ lock เช่น
pnpm-lock.yaml,package-lock.json - อย่า ignore โฟลเดอร์ build ถ้าต้อง publish เป็น npm package
- ตรวจสอบให้แน่ใจเสมอว่าไม่มีข้อมูลลับ (เช่น คีย์ API)
- ใช้ global
.gitignoreจัดการไฟล์จาก IDE หรือ OS
8. วิธีเช็กว่าไฟล์ถูก ignore หรือยัง
git check-ignore -v <path>
หรือ
git status --ignored
9. แก้ปัญหาไฟล์ที่ “เผลอ commit ไปแล้ว”
git rm --cached <file>
จากนั้นแก้ไข .gitignore และ commit ใหม่อีกครั้ง
10. คำถามพบบ่อย (FAQ)
เพิ่มใน .gitignore แล้ว แต่ทำไมไฟล์ยังถูก track อยู่?
- เพราะไฟล์เคยถูก commit ไปแล้ว ต้องลบจาก git ก่อน (
git rm --cached)
จะให้ Git ลืมไฟล์ที่ถูก commit ไปแล้วได้อย่างไร?
- ใช้คำสั่ง
git rm --cachedแล้ว commit ใหม่
ความต่างระหว่าง ignore กับ assume-unchanged คืออะไร?
- ignore คือไม่เคย track มาก่อน ส่วน assume-unchanged คือ track แล้วแต่บอก Git ว่าให้ทำเหมือนกับว่าไม่มีการเปลี่ยนแปลงชั่วคราว
11. สรุปและแหล่งอ้างอิงเพิ่มเติม
เคล็ดลับ:
เมื่อเขียนไฟล์ .gitignore ควรมีตัวอย่างโค้ดเล็ก ๆ ประกอบเสมอ เพื่อช่วยให้เข้าใจง่ายยิ่งขึ้น