ผมเจอปัญหาตอนใช้งาน Git แล้วเจอ Error แบบนี้ ค่อนข้างบ่อย
error: object file .git/objects/e1/<hash> is empty
error: object file .git/objects/e1/<hash> is empty
fatal: loose object e1<hash> (stored in .git/objects/e1/<hash>) is corrupt
สาเหตุของปัญหานี้มักเกิดจาก Git object file เสียหาย
วิธีแก้ มี 2 วิธี
- ใช้คำสั่ง
git fsckใช้คำสั่งgit fsckเพื่อตรวจสอบและซ่อมแซม Object database ของ Git:
git fsck
git fsck (file system check) จะทำการตรวจสอบ Object database ทั้งหมดของ Git ว่ามี Object ไหนเสียหายหรือหายไปบ้าง โดยจะแสดงรายการ Object ที่มีปัญหาออกมาให้เราเห็น
หลังจากรัน git fsck แล้ว Git จะลบ Object ที่เสียหายออกไป และพยายาม Recover จาก Object ที่เหลืออยู่ ถ้า Object ที่เสียหายยังอยู่ใน Remote เราสามารถ Fetch กลับมาได้ด้วย:
git fetch --all
- ลบ Object ที่เสียหายแล้ว Fetch ใหม่
เราสามารถลบ Object file ที่มีขนาด 0 (ไฟล์เปล่า) ออกไปก่อน แล้ว Fetch จาก Remote ใหม่:
find .git/objects/ -size 0 -exec rm -f {} \;
git fetch origin
คำสั่ง find จะหาไฟล์ที่มีขนาด 0 byte ใน .git/objects/ แล้วลบออกไป จากนั้น git fetch origin จะดึง Object ที่หายไปกลับมาจาก Remote
หวังว่าจะเป็นประโยชน์กับคนที่เจอปัญหาเดียวกันครับ