Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> ข้อผิดพลาด Windows

แก้ไข: .gitignore ไม่ทำงาน

GitHub กลายเป็นผู้นำในด้านการร่วมมือเขียนโค้ดและแชร์ Repository เป็นซอฟต์แวร์ควบคุมเวอร์ชันหลักที่ให้ผู้ใช้ควบคุม distributed version control และ SCM (Source Code Management) แพลตฟอร์มนี้ถูกใช้โดยธุรกิจและบริษัทใหญ่ทั่วโลก

แก้ไข: .gitignore ไม่ทำงาน

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

คือ .gitignore อะไร?

Git (หรือ GitHub) มองเห็นทุกไฟล์ใน Working directory จะจัดประเภทแต่ละไฟล์เป็น 3 ประเภท:

  • Tracked: ไฟล์ที่เคย committed หรือ staged ในประวัติ
  • Untracked: ไฟล์ที่ยังไม่เคย staged หรือ committed
  • Ignored: ไฟล์ที่ผู้ใช้บอก Git ให้ละเลยโดยสิ้นเชิง

ไฟล์ที่ถูก Ignored อาจแตกต่างตามสถานการณ์ และส่วนใหญ่คือไฟล์ที่สร้างโดยเครื่องหรือ build artifacts นี่เป็นแนวทางทั่วไป อาจ Ignored ไฟล์อื่นตามต้องการ ตัวอย่างไฟล์เหล่านี้:

  • Compiled code: ไฟล์ที่มีนามสกุล .class, .pyc, .ccp เป็นต้น
  • Hidden system files: ไฟล์ที่ระบบใช้แต่อยู่ในที่ซ่อน เช่น DS_Store หรือ Thumbs.db เป็นต้น
  • Build output directories: ไดเรกทอรีของ /bin, /out เป็นต้น
  • Dependency caches: ไฟล์ใน /node หรือ /packages modules
  • IDE Configuration files: ไฟล์ config ที่สร้างหรือจัดการโดย IDE software
  • Files generated at runtime: โปรแกรมบางอย่างสร้างไฟล์ตอนรันไทม์ หากรันโค้ดแบบนี้ ไฟล์บางไฟล์อาจสร้างใน working folder และอาจ ignore ใน Git

ไฟล์ไหนที่ต้องการ ignore จะถูกติดตามในไฟล์พิเศษชื่อ .gitignore ซึ่งมักอยู่ที่ root ของ working repository ตามเอกสารทางการของ GitHub ไม่มีคำสั่ง gitignore เฉพาะ ต้องแก้ไขไฟล์ที่ต้องการ ignore เอง ไฟล์ .gitignore มี patterns ที่จับคู่กับชื่อไฟล์ใน working repository ใช้ 결정ว่าไฟล์ไหนควร ignore

สาเหตุที่ .gitignore ไม่ทำงาน

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

นี่คือวิธีแก้ที่อาจใช้ได้ แต่ละวิธีอาจไม่ใช้ได้ในกรณีของคุณ โปรดลองวิธีถัดไปหากเงื่อนไขเริ่มต้นไม่ตรง

วิธีแก้ 1: ตรวจสอบไฟล์ .gitignore

มีกรณีน่าสนใจที่ .gitignore ถูกสร้างในรูปแบบผิด ปัญหานี้เกิดเมื่อผู้ใช้สร้างไฟล์ด้วย Notepad เริ่มต้นใน Windows พบว่า Notepad เขียนไฟล์เป็น Unicode แทนที่จะเป็น ANSI ในวิธีนี้ เราจะบันทึกการเปลี่ยนแปลงของ Notepad ในรูปแบบ .gitignore ที่ถูกต้อง และดูว่าปัญหาแก้ไขได้หรือไม่

หมายเหตุ: ต้องลบนามสกุล .txt ออกจากไฟล์เมื่อสร้างไฟล์ใหม่ด้วย Notepad

  1. หลังเขียนโค้ดหรือการเปลี่ยนแปลงในเอกสารข้อความใหม่ใน Notepad คลิก File และเลือก Save As
แก้ไข: .gitignore ไม่ทำงาน
  1. หน้า Encoding เลือก ANSI ลบนามสกุล .txt ออก และบันทึกไฟล์ชื่อ '.gitignore' เลือกไดเรกทอรีที่ถูกต้องและบันทึก
แก้ไข: .gitignore ไม่ทำงาน
  1. ไปที่ไดเรกทอรีและตรวจสอบว่าไฟล์ที่ถูกต้องถูกสร้าง ทดสอบอีกครั้งกับ Git ดูว่า Ignore feature ทำงานแล้วหรือไม่

นักพัฒนาควรหลีกเลี่ยง Notepad เริ่มต้นใน Windows ควรใช้ Notepad สำหรับโปรแกรมเมอร์ เช่น Notepad++ เป็นต้น จะไม่มีปัญหาแบบนี้

หมายเหตุ: หากไฟล์บันทึกเป็น UNICODE แล้ว ควรบันทึกเนื้อหาในรูปแบบ ANSI อย่างถูกต้อง หากต้องการให้ Git ตรวจจับไฟล์ได้ถูกต้อง

วิธีแก้ 2: ตรวจสอบไฟล์ที่พยายาม Ignore

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

ควรดูโครงสร้าง (repository) และตรวจสอบว่าไฟล์ที่พยายาม ignore ไม่ได้ถูกเพิ่มเข้า Repository หากถูกเพิ่มแล้ว ต้องลบไฟล์ออกจาก Repository และหลัง commit การเปลี่ยนแปลงล่าสุด ให้เพิ่มชื่อไฟล์ใน .gitignore (หรือคัดลอกเนื้อหาไฟล์และหลังลบ สร้างใหม่ด้วยชื่ออื่น)

วิธีแก้ 3: เพิ่มไฟล์เข้า Repository ใหม่

หากเพิ่มกฎใน .gitignore แล้ว แต่ไฟล์ที่ต้องการ ignore ถูกเพิ่มเข้าไปแล้ว สามารถเพิ่มไฟล์ใหม่ได้ การเพิ่มหมายถึงการลบทุกอย่างออกจาก Git's index แล้วเพิ่มทุกอย่างกลับเข้า Repository อีกครั้ง เมื่อเพิ่มไฟล์ใหม่จากศูนย์ กฎใน .gitignore จะถูกคำนึงถึง และเพิ่มเฉพาะไฟล์ที่ถูกต้อง

หมายเหตุ: ควรสำรองโค้ดไว้ที่อื่นก่อนทำวิธีนี้ การมี backup เสมอดีเผื่อกรณีฉุกเฉิน

  1. รันคำสั่งนี้ จะ unstage และลบ path ไปยังไฟล์จาก git index แบบ recursive
git rm -r --cached .
  1. หลังรันคำสั่งนี้แล้ว รันคำสั่งต่อไป จะเพิ่มไฟล์ทั้งหมดกลับ และเนื่องจาก .gitignore มีกฎ เฉพาะไฟล์ที่ถูกต้องจะถูกอัปเดต
git add .
  1. ตอนนี้ commit ไฟล์ทั้งหมดกลับเข้า index ด้วยโค้ดด้านล่าง:
git commit -m ".gitignore is now working"

ตรวจสอบไฟล์ และดูว่าปัญหาแก้ไขได้ และใช้ .gitignore ได้อีกโดยไม่มีปัญหา