3 回答
TA贡献2065条经验 获得超13个赞
我不能肯定地说不能访问您的存储库数据,但是我相信可能有一个或多个打包引用仍然引用您运行前的旧提交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。现在编辑.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 关注
- 769 浏览
添加回答
举报