git:晃来晃去的斑点



我最近在我的存储库上运行了git fsck --lost-found

我本以为会看到几个挂起的提交,在那里我重置了HEAD

然而,我很惊讶地看到可能有几千条悬挂的blob消息。

我不认为我的存储库有什么问题,但我很好奇是什么原因导致了这些悬空的斑点?只有两个人在处理存储库,我们没有做任何异常的事情。

我不认为它们是由一个旧版本的文件被一个新版本所创建的,因为git需要保留这两个Blob,这样它才能显示历史。

仔细想想,有一次我们确实错误地向项目中添加了一个非常大的目录(数千个文件),然后将其删除。这可能是所有悬空Blob的来源吗?

只是想了解这个谜。

上次我看到这个时,我偶然发现了这个线程,特别是这个部分:

你也可能以包中悬挂的对象结束。当那包重新包装后,这些物品会松动,然后最终过期根据上述规则。然而,我相信gc不会总是重新包装旧包装;它会制作新的包,直到你有了很多包,然后将它们全部组合起来(至少"gc--auto"会这样做不要回忆是否只有"git-gc"遵循相同的规则)。

所以这是正常的行为,我相信最终会被收集起来。

编辑:根据丹尼尔,你可以通过运行立即收集

git gc --prune="0 days"

我真的很不耐烦,使用了:

git gc --prune="0 days"

无论何时将文件add添加到索引,该文件的内容都会作为blob添加到Git的对象数据库中。当您reset/rm --cached该文件时,Blob将仍然存在(下次运行gc时,它们将被垃圾收集)

然而,当这些文件是提交的一部分,并且您稍后决定reset历史记录时,旧的提交仍然可以从Git的reflog访问,并且只有在一段时间后(通常是一个月,iirc)才会被垃圾收集。不过,这些对象不应该显示为悬空,因为它们仍然是从reflog中引用的。

相关内容

  • 没有找到相关文章

最新更新