为什么我的repo中的一些blob对象不属于任何提交都没有引用的树?

正在处理一个项目,以在少数大型存储库中对大型二进制文件进行编目。我试图了解在什么情况下您可能有 Blob -> Tree -> nothing .. 本质上是一个未附加到提交的 Blob/Tree。

我正在运行这样的东西:

  • 使用以下方法获取所有 blob: git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)'
  • 迭代 blob ( current_blob ):
  • 使用获取所有提交 git log --pretty=tformat:'%T|%h|%s|%aN|%aE'
  • 迭代提交(current_commit):
  • 使用获取提交引用的所有对象 git -C $RepoFolder ls-tree -r <current_commit.id>
  • 如果提交引用的任何对象与current_blob匹配,则我们已找到此 blob 的提交

我发现有些与树相关的 blob 与任何提交无关。

在什么情况下会发生这种情况?

回答

这就是所谓的不可达对象。您很可能熟悉无法访问的对象类型dangling commit,当您硬重置分支时最常发生这种情况,在此过程中删除(希望)不需要的提交。

许多其他 git 操作也会发生同样的情况,特别是每次调用git add, (正如git-gc联机帮助页指出的那样),以防您以后不提交该文件的添加状态(但可能是一秒钟后的状态add)。

在此处进一步阅读 SO:

  • vgoff对旧问题“什么是悬空提交/blob 以及它们来自哪里?”的回答
  • 在 git 中恢复悬空的 blob

以上是为什么我的repo中的一些blob对象不属于任何提交都没有引用的树?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>