ผมสุ่มตีในวันนี้ในขณะที่พยายามที่จะใช้ Git ขยะเก็บ :
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
ฉันจะจัดการกับปัญหานี้ได้อย่างไร?
ผมสุ่มตีในวันนี้ในขณะที่พยายามที่จะใช้ Git ขยะเก็บ :
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
ฉันจะจัดการกับปัญหานี้ได้อย่างไร?
คำตอบ:
ฉันไม่เข้าใจความแตกต่างของสิ่งนี้ แต่ตามที่แนะนำในหัวข้อนี้เมื่อฉันพบสิ่งนี้ฉันเพิ่งทำ
$ mv .git/refs/remotes/origin/HEAD /tmp
(เก็บไว้รอบ ๆ ในกรณี) แล้ว
$ git gc
ทำงานโดยไม่บ่น ฉันไม่พบปัญหาใด ๆ
git prune
ได้ผลสำหรับฉันวิธีลบข้อมูลที่สะสมใน Git แต่ไม่ได้รับการอ้างอิงจากสิ่งที่เป็นประโยชน์
$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
สำหรับฉัน
ปัญหาที่ฉันพบ (ซึ่งเป็นปัญหาเดียวกับที่ @Stavarengo กล่าวถึงในความคิดเห็นนี้ด้านบน) คือสาขาระยะไกลเริ่มต้น ( develop
ในกรณีของฉัน) ถูกลบไปแล้ว แต่ยังคงอ้างถึงใน.git/refs/remotes/origin/HEAD
.
การเปิด.git/refs/remotes/origin/HEAD
ในโปรแกรมแก้ไขของฉันแสดงให้เห็นสิ่งนี้:
ref: refs/remotes/origin/develop
ฉันแก้ไขอย่างระมัดระวังเพื่อชี้ไปที่สาขาเริ่มต้นใหม่ของฉันและทุกอย่างเรียบร้อยดี:
ref: refs/remotes/origin/master
เบาะแสที่ทำให้ฉันหายไปคือการวิ่งgit prune
แสดงข้อผิดพลาดนี้:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
หลังจากเห็นคำตอบของเทรนตันฉันก็มองไปที่ .git/refs/remotes/origin/HEAD
และเห็นว่ามันชี้ไปที่สาขาเก่าที่ตอนนี้ถูกลบไปแล้ว
แต่แทนที่จะแก้ไขไฟล์ด้วยตัวเองฉันลองใช้วิธีแก้ปัญหาของ Ryan:
git remote set-head origin --auto
มันตั้งค่าไฟล์เป็นสาขาใหม่โดยอัตโนมัติและgit gc
ทำงานได้ดีหลังจากนั้น
git remote set-head $REMOTE --auto
ในกรณีของฉัน $ REMOTE เป็นนามแฝงระยะไกลไม่ใช่ "ต้นทาง" เริ่มต้นเนื่องจากฉันมีการตั้งค่ารีโมตหลายรายการ
ฉันคิดว่าวิธีแก้ปัญหามีดังต่อไปนี้เนื่องจากดูเหมือนจะได้ผล แต่ปรากฎว่าไม่สามารถแก้ปัญหาได้จริง
git remote set-head origin --auto
git prune
(ตามที่แนะนำในเอาต์พุตคำสั่งแรก) ดังนั้นฉันจึงไม่สามารถบอกได้อย่างชัดเจนว่าอะไรช่วยฉันได้บ้าง - อันดับแรกวินาทีหรือทั้งสองอย่าง
git remote set-head origin --auto
แก้ไขไฟล์อ้างอิง / รีโมท / ต้นทาง / HEAD โดยที่ฉันไม่ต้องใช้git prune
error: Multiple remote HEAD branches. Please choose one explicitly
และต้องใช้git remote set-head origin mybranch
(ในขณะที่สาขา 'mybranch' กำลังชำระเงิน) เพื่อให้ข้อผิดพลาดหายไป
ดูเหมือนว่าการอ้างอิงสัญลักษณ์ของคุณอาจจะเสีย ... ลองแทนที่ด้วยสาขาเริ่มต้นของคุณเช่นนี้ตัวอย่างเช่นสาขาเริ่มต้นของฉันคือmaster
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
ที่ควรแก้ไข
หากคุณใช้ git worktrees ตรวจสอบให้แน่ใจว่าคุณกำลังทำไฟล์
git worktree prune
ก่อนวิ่ง
git gc
ฉันมีเวิร์กทรีเสียหายและดูเหมือนจะทำเคล็ดลับหลังจากลบเวิร์กทรีที่เสียหาย git prune
ดูเหมือนจะไม่ได้ผล
สาเหตุของสิ่งนี้สำหรับฉันคือทำงานในโฟลเดอร์ที่บีบอัดใน Windows เมื่อโฟลเดอร์ไม่ถูกบีบอัดไฟล์แพ็คจะเสียหายซึ่งทำให้เกิดปัญหาแปลก ๆ อื่น ๆ เช่นไม่สามารถตัดกิ่งที่ไม่มีอยู่ได้
การแก้ไขเพียงอย่างเดียวคือการล้างไดเร็กทอรีการทำงานและโคลนรีโมต repo อีกครั้ง โชคดีที่ฉันยังสามารถผลักและดึงการอัปเดตเพื่อให้แน่ใจว่าไม่มีอะไรสูญหาย ตอนนี้ทุกอย่างเรียบร้อยดี
master
develop
หลายวันก่อนที่ฉันจะเปลี่ยนกลับจากdevelop
เป็นmaster
และฉันลบสาขาเริ่มต้นเก่าdevelop
แต่ในไดเร็กทอรีการทำงานของฉันไฟล์.git/refs/remotes/origin/HEAD
ยังคงชี้ไปrefs/remotes/origin/develop
ที่ไม่มีอยู่แล้ว ในสถานการณ์นี้การลบไฟล์ได้ผล