正在处理一个项目,以在少数大型存储库中对大型二进制文件进行编目。我试图了解在什么情况下您可能有 Blob -> Tree -> nothing .. 本质上是一个未附加到提交的 Blob/Tree。
我正在运行这样的东西:
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)'git log --pretty=tformat:'%T|%h|%s|%aN|%aE'git -C $RepoFolder ls-tree -r <current_commit.id>我发现有些与树相关的 blob 与任何提交无关。
在什么情况下会发生这种情况?
这就是所谓的不可达对象。您很可能熟悉无法访问的对象类型dangling commit,当您硬重置分支时最常发生这种情况,在此过程中删除(希望)不需要的提交。
许多其他 git 操作也会发生同样的情况,特别是每次调用git add, (正如git-gc联机帮助页指出的那样),以防您以后不提交该文件的添加状态(但可能是一秒钟后的状态add)。
在此处进一步阅读 SO: