来自.git/objects的随机对象上的'git cat-file -p <sha1>':"致命:不是有效的对象名称"

Igo*_*pov 20 git

我想更多地了解git的内部工作原理,所以我运行了这些命令:

cd .git/objects/62

ls
00cb2f01089db22aca24675272a16712e89747
0ee798881329430bfef6c558be7b14c1f0676f
1087f408e2f2bd782d53a1211a7418fee4f6a7
a6a71f3bd5a3af882f3f0ec4fad4c672055746
f95e69f344b52c5038d922260189475626e69a

git cat-file -p 00cb2f01089db22aca24675272a16712e89747
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

fatal: Not a valid object name 00cb2f01089db22aca24675272a16712e89747
Run Code Online (Sandbox Code Playgroud)

我为什么得到它?

我试了10次(对于.git/objects里面不同目录的不同文件)并得到了同样的错误.

如何查看文件的实际内容(无论是blob,树还是提交)?

kni*_*ttl 25

您不必cd进入.git对象存储区,但必须提供完整的sha1哈希:

git cat-file -p 621087f408e2f2bd782d53a1211a7418fee4f6a7
Run Code Online (Sandbox Code Playgroud)

Git将其对象存储.git/objects在256个文件夹中,以保持目录的大小.每个哈希的前两个字符用作目录名称,其余38个字符用作文件名.

  • @IgorPopov:你真的尝试过我提供的命令吗?你读过我答案中的最后一句话了吗?文件名不直接对应于对象哈希值,因为它们被扇出到256个子目录.一个GIT中对象的实际的哈希是目录名+文件名(`6200cb2f01089db22aca24675272a16712e89747`,`620ee798881329430bfef6c558be7b14c1f0676f`,`621087f408e2f2bd782d53a1211a7418fee4f6a7`,`62a6a71f3bd5a3af882f3f0ec4fad4c672055746`和`62f95e69f344b52c5038d922260189475626e69a`) (6认同)
  • 好的,但不 cd'ing into .git 对象不能回答我的问题...为什么我会收到错误?以及如何查看对象的实际内容? (2认同)