我有一个仅限本地的存储库,用于包含非常大的文件(扫描和一些数据库文件)。在某些时候,我决定删除包含所有这些目录的目录,并重写历史记录以根除相关目录。
我最终得到了一个非常轻的回购,但.git目录仍然需要1.3G的空间。只有一个包,我发现这个包装中至少有一个blob占用了很多空间。
我尝试了很多东西来清理回购,包括git gc的各种召唤,但没有任何作用,甚至没有git forget-blob。 Git forget-blob告诉我«在回购历史中找不到»。
那时,我迷路了。任何帮助表示赞赏。
谢谢!
编辑:我发现其他一些非常奇怪的信息。 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
答案 0 :(得分:0)
有许多事情需要考虑:
为了说服git删除一个对象,应该有 no 指针。另一件需要考虑的事情是对象被保存在"包"中。我记得我曾经不得不"爆炸"我拥有的所有包文件(即获取git将所有对象放在FS上),然后删除包文件然后我让git重新包装。
https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery
检查部分"删除对象"。希望这很好。