无法从Git存储库中删除blob

3
我有一个仅限本地的仓库,里面曾经包含非常大的文件(扫描和一些数据库文件)。某个时刻,我决定删除包含所有这些文件的目录,并重写历史记录以消除相关目录。
最终,我得到了一个非常轻量级的仓库,但是.git目录仍然占用了1.3G的空间。只有一个pack,我至少找到其中一个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

然而,我无法获取有关这些数据块的任何信息。这怎么可能?
git rev-list --objects --all  | grep 250129
zsh: done       git rev-list --objects --all | 
zsh: exit 1     grep --color 250129

forget-blob 不是标准的 Git 命令,所以它一定是你安装的某个东西(也许是从这里安装的?)。如果是这样的话,那么链接的脚本似乎有一个 bug,但是这个 bug 应该会保留 blob,这样第二次运行 git forget-blob 也会假装删除它,在我想到的情况下。 - torek
我不认为这是脚本中的一个错误。我已经在我的原始问题中添加了额外的信息。 - Didier Verna
啊,所以你最初使用的不是 forget-blob 脚本删除了文件?如果您包括确切的命令及其输出(如果可能,请剪切和粘贴文本,而不是屏幕截图),那将非常有帮助。我现在猜测该对象实际上在包中无法访问,但是如果不运行 git repack -A -d,Git 将无法重建包以丢弃不可访问的对象。 - torek
谢谢!我会尝试的。您的评论并不是关于正确的问题。是否愿意在https://tex.stackexchange.com/questions/566539/is-the-transparent-shadows-hack-for-beamer-blocks-broken上回答呢?如果由于某些原因您无法回答,我将自己传播您的答案。 - Didier Verna
1个回答

0

有一些事情需要考虑:

  • 从 reflog 中进行的任何修订是否指向之前的修订(重写之前)?
  • 任何存储对象是否指向旧的修订版本?
  • 任何远程分支是否指向旧的修订版本?

为了让 Git 删除一个对象,应该没有指向它的指针。另一个需要考虑的问题是,对象保存在“包”中。我记得我曾经不得不“展开”我拥有的所有包文件(也就是让 Git 把所有对象放在文件系统上),然后删除包文件,然后要求 Git 重新打包。

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

请查看关于“删除对象”的部分。希望这足够好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接