Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

.gitignore ไม่ทำงาน? คู่มือแก้ไขปัญหา

ชื่อเรื่องบอกเลยครับ มีหลายกรณีที่คุณอาจ Troubleshoot ไฟล์ .gitignore เพราะมันไม่ทำงานเหมือนที่คาดหวัง

ไฟล์ .gitignore เล่นบทบาทสำคัญใน Git Repositories หาก .gitignore ของคุณไม่ทำงาน คุณอาจ Track การเปลี่ยนแปลงที่ควรเก็บเป็นความลับโดยไม่ได้ตั้งใจ การเปลี่ยนแปลงบางอย่างอาจมีข้อมูล敏感 เช่น API Keys

สาเหตุหลัก 2 ประการของ .gitignore ที่เสียหาย:

  • เพิ่มไฟล์เข้า .gitignore หลังจาก Commit ไปแล้ว
  • อ้างอิงชื่อไฟล์หรือ Path ผิดใน .gitignore

เราจะอภิปรายทั้ง 2 ปัญหานี้และวิธีแก้ไข

ไฟล์ .gitignore คืออะไร?

ไฟล์ .gitignore มีรายการไฟล์ทั้งหมดที่คุณไม่ต้องการบันทึกเข้า Git Repository ไฟล์นี้มักใช้เก็บ Configuration และ Environment Files ให้นอก Repository ไฟล์เหล่านี้มักมีข้อมูลส่วนตัวและไม่ควรอยู่ใน Remote Repository ใดๆ

ไฟล์นี้ควรตั้งชื่อและบันทึกชัดเจนเป็น .gitignore ใน Plain Text File นี้ คุณจะเพิ่ม Path ของไฟล์หรือ Directories ที่ต้องการให้ Git ไม่ Track สิ่งที่เพิ่มในไฟล์นี้ Git จะ Ignore และไม่เพิ่มเข้า Tracking Tree

ตัวอย่างเนื้อหา .gitignore:

node_modules/ .env

ในไฟล์นี้ เราบอก Git ให้ Ignore ไฟล์เฉพาะ คือ .env ซึ่งมักมี API Keys เรายัง Ignore โฟลเดอร์ node_module ที่มี NPM Packages ติดตั้งทั้งหมด

ไฟล์ที่มัก Ignore ได้แก่ .DS_Store files, .env files, และ config files .DS_Store มักพบบน macOS และไม่จำเป็นต้องอยู่ใน Git Repository

ส่วนใหญ่ .gitignore files วางไว้ที่ Root Directory ของ Repository เพื่อเรียนรู้เพิ่มเติม อ่านคู่มือ .gitignore สำหรับ Beginner ของเรา

สถานการณ์ A: เพิ่มไฟล์เข้า .gitignore หลัง Commit แล้ว

เราอาจร้องเรียนว่า gitignore ไม่ทำงานหลังจาก Commit ไฟล์ที่ควร Ignore ไปโดยผิดพลาด เราจึงเพิ่มเข้า gitignore หลังจากนั้นและร้องเรียนว่า Git ยัง Track อยู่

เหตุผลคือ เราต้อง Add ไฟล์/โฟลเดอร์เข้า .gitignore ก่อน Commit Git Track อยู่แล้ว ดังนั้นเพื่อ Untrack อีกครั้ง เราต้องรันคำสั่ง:

git rm -rf --cached <path>

ส่วนแรก git rm ลบ <path> Flag --cached ระบุว่าลบจาก Index แต่คงไว้ใน Local Directory r คือ Recursive Removal หากให้ Directory Path และ f คือ Force หากทำงานกับแค่ File และยังต้องการเก็บไว้ Local:

git rm --cached <file>

ด้วยคำสั่งนี้ คุณบอก Git ว่าไม่ต้องการ Track ไฟล์/โฟลเดอร์ที่ให้แล้ว ลองใหม่อีกครั้ง และ gitignore จะทำงานได้ตามปกติ จำไว้ว่าไฟล์/โฟลเดอร์ต้องระบุใน gitignore ให้ถูกต้อง!

สถานการณ์ B: .gitignore สร้างก่อน Commit แต่ยังไม่ Track File

หาก .gitignore ยังไม่ Track ไฟล์ วิธีแก้อาจง่ายแค่ตรวจสอบว่าอ้างอิงไฟล์ถูกต้อง คุณต้องระบุชัดเจนว่า .gitignore ควร Ignore ไฟล์ไหน บ้าง Spelling Errors หรือ Incorrect Path Names ต้องแก้เอง

พิจารณาตัวอย่าง:

*.pyyc

.gitignore บอก Git ให้ Ignore ไฟล์ .pyyc ทั้งหมด แต่เจตนาของเราคือ Ignore .pyc files .pyc คือ Configuration Files สำหรับ Python Programs .gitignore ไม่รู้ ดังนั้นเราต้องแก้ Rule:

*.pyc

Repository ของเราจะ Ignore .pyc files ทั้งหมดแล้ว

ตรวจสอบอีกว่าไม่มี Trailing Space ตัวหน้าหรือท้ายของการประกาศ File/Folder

สรุป

เราอภิปรายสถานการณ์และวิธีแก้ไขต่างๆ เมื่อ gitignore ไม่ทำงาน ตัวสำคัญคือต้องเข้าใจว่าไฟล์/ไดเรกทอรีอยู่ที่ไหน เพื่อเพิ่ม Path ให้ถูกต้อง

คุณต้องเพิ่มไฟล์ที่ต้องการ Ignore ทันทีที่สร้างขึ้น หาก Commit ผิดพลาด โชคดีที่เรามี git rm -rf --cached <path> คำสั่งนี้จะนำไฟล์ออกจาก Git Workflow แล้วคุณสามารถเพิ่มเข้า gitignore ได้

หมายเหตุสุดท้าย: อาจมีกรณีอื่นที่ git reset มีประโยชน์ ผมเขียนบทความเกี่ยวกับ git reset ที่จะเป็นประโยชน์ Git reset คล้าย Undo กลับไปในอดีต ในบางกรณีนั่นคือสิ่งที่คุณต้องการ

อยากเรียนรู้ Git เพิ่มเติม? อ่านคู่มือ How to Learn Git ของเรา จะพบคำแนะนำจาก Expert และทรัพยากรเรียนรู้ชั้นนำ