无法从Git仓库中删除blob

时间:2017-03-20 14:40:13

标签: git blob

我有一个仅限本地的存储库,用于包含非常大的文件(扫描和一些数据库文件)。在某些时候,我决定删除包含所有这些目录的目录,并重写历史记录以根除相关目录。

我最终得到了一个非常轻的回购,但.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

1 个答案:

答案 0 :(得分:0)

有许多事情需要考虑:

  • reflog的任何修订都指向以前的任何修订(重写之前)?
  • 任何存储对象都指向任何旧版本?
  • 任何远程分支都在使用任何旧版本?

为了说服git删除一个对象,应该有 no 指针。另一件需要考虑的事情是对象被保存在"包"中。我记得我曾经不得不"爆炸"我拥有的所有包文件(即获取git将所有对象放在FS上),然后删除包文件然后我让git重新包装。

https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery

检查部分"删除对象"。希望这很好。