3 回答

TA貢獻2065條經驗 獲得超14個贊
我不能肯定地說不能訪問您的存儲庫數據,但是我相信可能有一個或多個打包引用仍然引用您運行前的舊提交git filter-branch。這可以解釋為什么git fsck --full --unreachable即使您的reflog已過期并刪除了原始(未打包的)ref,也不會將大blob稱為不可訪問的對象。
這是我會怎么做(后git filter-branch并git gc已經完成):
1)確保原始裁判不見了:
rm -rf .git/refs/original
2)使所有reflog條目過期:
git reflog expire --all --expire='0 days'
3)檢查舊包裝的裁判
這可能很棘手,具體取決于您有多少個打包的引用。我不知道可以自動執行此操作的任何Git命令,因此我認為您必須手動執行此操作。備份.git/packed-refs?,F在編輯.git/packed-refs。檢查是否有舊的裁判(尤其是查看是否包裝了的任何裁判.git/refs/original)。如果您發現任何不需要的舊文件,請將其刪除(刪除該引用的行)。
完成清理packed-refs文件后,請查看是否git fsck注意到無法訪問的對象:
git fsck --full --unreachable
如果這行得通,并且git fsck現在報告您的大Blob無法訪問,則可以繼續執行下一步。
4)重新打包打包的檔案
git repack -A -d
這將確保無法到達的對象被解壓并保持解壓。
5)修剪松散(無法到達)的物體
git prune
那應該做到的。Git確實應該有更好的方法來管理打包的引用。也許有我不知道的更好的方法。在沒有更好的方法的情況下,手動編輯packed-refs文件可能是唯一的方法。
- 3 回答
- 0 關注
- 812 瀏覽
添加回答
舉報