1

我在当前文件和外部驱动器上的文件备份之间运行差异检查器,我发现 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

4

1 回答 1

1

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

所以看起来 .git/objects 中的所有文件都是提交或悬空提交。我发现是一个关于 git 对象如何工作的简洁指南。

于 2015-02-23T13:30:22.227 回答