我有一个仅限本地的存储库,它曾经包含非常大的文件(扫描和一些数据库文件)。在某些时候,我决定删除包含所有这些目录的目录,并重写历史记录以根除有问题的目录。
我最终得到了一个非常轻量级的 repo,但是 .git 目录仍然需要 1.3G 的空间。只有一包,我发现这包中至少有一个 blob 占用了大量空间。
我尝试了很多方法来清理存储库,包括各种 git gc 调用,但没有任何效果,甚至 git forget-blob 也没有。 Git forget-blob 告诉我“在 repo 历史中找不到”。
那时,我迷路了。任何帮助表示赞赏。
谢谢!
编辑:一些我觉得很奇怪的附加信息。 Git verify-pack 显示了 3 个非常大的文件:
git verify-pack -v .git/objects/pack/pack-5cc03e9fbdbdff4ce1bbeb43c55c3e17875f2bd7.idx| sort -k 3 -n | tail -3
4983118ae60be35299b153dc5850134329f6ddf0 blob 7336960 2000979 615935480
5c810dfffa6a033631596218c43a7360cf2aff10 blob 12455669 1197771 6330554
25012927d95cf3bd15f2a8cb30da2c4f4b988e82 blob 105476096 83834099 532101381
但是,我无法获得有关这些 Blob 的任何信息。这怎么可能?
git rev-list --objects --all | grep 250129
zsh: done git rev-list --objects --all |
zsh: exit 1 grep --color 250129
最佳答案
有很多事情需要考虑:
- reflog 中的任何修订是否指向任何先前的修订(重写之前)?
- 是否有任何存储对象指向任何旧版本?
- 是否有任何远程分支指向任何旧版本?
为了说服 git 删除一个对象,应该有没有指向它的指针。另一件需要考虑的事情是对象保存在“包”中。记得有一次我不得不把我所有的pack文件都“炸开”(也就是让git把所有对象放到FS上),然后把pack文件删了再让git重新pack。
https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery
检查关于“删除对象”的部分。希望这足够好。
关于git - 无法从 Git 存储库中删除 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42906491/