GitHub初始化仓库后的第一条commit信息的Git对象在objects目录下不存在

最近研究Git时,发现了一个奇怪的问题。

Git的每一条commit记录都应该对应当前仓库.git/objects目录下的一个Git对象(本质上是一个文件)。

例如:4e1951ba977e84d72c3c7f754b61b1c911f24aff这个SHA-1 hash对应的Git对象应该是objects目录的子目录4e下的名为1951ba977e84d72c3c7f754b61b1c911f24aff的文件。

但当这条记录是GitHub仓库的初始化commit时,却找不到对应的Git对象(甚至没有4e这个目录),同时这条提交的一切信息又可以通过git cat-file命令正常打印。详见下图。
是这条commit单独存储在其他地方了吗?
或者是有什么其他我不知道的细节?

本地初始化的Git仓库无此问题。

有关Git对象的更多信息可以参考此博客

2 Likes

找到原因了。GitHub的初始commit被Git压缩为包对象存储在.git/objects/pack目录下了。

通过git verify-pack -v命令可以查看到这条commit的对象:

StackOverflow相关问答: object directory has no objects after a git clone

1 Like