我在当前文件和外部驱动器上的文件备份之间运行差异检查器,我发现git repo和它的备份之间存在一些差异。唯一的区别是左侧的.git / objects下有一些额外的文件,右侧有两个空白的.git / objects / info和.git / objects / pack文件夹。我在两边做了一个快速的git show
和git log
,它提供了相同的输出。
然后我做了一个git fsck --no-reflogs
,并在左侧发现了一个额外的悬空提交。迭代git ls-tree
我的方式下来额外的提交给了我一堆树和blob,除了左边的额外文件之外的其他所有文件。
在最后一个文件上使用git cat-file -t <sha1>
告诉我这是一棵树。但是,我在每次提交时都使用了git ls-tree
,但仍然没有找到对这个神秘树对象的引用。那么这个文件究竟来自哪里呢?我99.99%确定它并不重要,只是好奇:P
答案 0 :(得分:1)
git ls-tree <sha1>
会给它指向的树,但它实际上给了它所指向的树的子节点。使用找到对象内容的git cat-file -p <sha1>
给了我需要的信息。
因此,似乎.git / objects中的所有文件都是提交或悬空提交。我发现this是git对象如何工作的简明指南。