Git找不到悬空树的起源

时间:2015-02-23 12:40:35

标签: git git-dangling

我在当前文件和外部驱动器上的文件备份之间运行差异检查器,我发现git repo和它的备份之间存在一些差异。唯一的区别是左侧的.git / objects下有一些额外的文件,右侧有两个空白的.git / objects / info和.git / objects / pack文件夹。我在两边做了一个快速的git showgit log,它提供了相同的输出。

然后我做了一个git fsck --no-reflogs,并在左侧发现了一个额外的悬空提交。迭代git ls-tree我的方式下来额外的提交给了我一堆树和blob,除了左边的额外文件之外的其他所有文件。

在最后一个文件上使用git cat-file -t <sha1>告诉我这是一棵树。但是,我在每次提交时都使用了git ls-tree,但仍然没有找到对这个神秘树对象的引用。那么这个文件究竟来自哪里呢?我99.99%确定它并不重要,只是好奇:P

1 个答案:

答案 0 :(得分:1)

嗯,菜鸟的错误。事实证明,额外的悬空提交直接指向丢失的树。我认为在提交对象上执行git ls-tree <sha1>会给它指向的树,但它实际上给了它所指向的树的子节点。使用找到对象内容的git cat-file -p <sha1>给了我需要的信息。

因此,似乎.git / objects中的所有文件都是提交或悬空提交。我发现this是git对象如何工作的简明指南。