N

Nokfa Docs

ไม่มีชื่อบทความ

คู่มือใช้งานไฟล์ .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 ควรมีตัวอย่างโค้ดเล็ก ๆ ประกอบเสมอ เพื่อช่วยให้เข้าใจง่ายยิ่งขึ้น