Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“git cat file-p”时,子模块提交对象“不是有效的对象名”_Git - Fatal编程技术网

使用“git cat file-p”时,子模块提交对象“不是有效的对象名”

使用“git cat file-p”时,子模块提交对象“不是有效的对象名”,git,Git,我已经更加熟悉了git的内部结构和不同的git对象。我有一个简单的存储库,在顶部目录中有一个.txt文件,在名为“我的目录”的目录中有两个.txt文件file1.txt和file2.txt,还有一个子模块名为“我的子模块”。我在尝试运行$git cat file-p{submodule git commit object SHA-1}时出错,我无法找出原因。我正在下面展示我正在运行的所有命令,希望有人能帮助我 $ git cat-file -p master tree fcc88590212b4

我已经更加熟悉了git的内部结构和不同的git对象。我有一个简单的存储库,在顶部目录中有一个.txt文件,在名为“我的目录”的目录中有两个.txt文件file1.txt和file2.txt,还有一个子模块名为“我的子模块”。我在尝试运行$git cat file-p{submodule git commit object SHA-1}时出错,我无法找出原因。我正在下面展示我正在运行的所有命令,希望有人能帮助我

$ git cat-file -p master
tree fcc88590212b42b31803217036a93a9edfe4af1c
parent ae767cc2edd396e63f127d4f3354f769645a3dc4
author Martin
committer Martin

Awesome commit


$ git cat-file -p fcc88590212b42b31803217036a93a9edfe4af1c
100644 blob 21735012b86a0c6c266eb7fb629a777ca70848c1  my-file.txt
040000 tree 4df930165b3c59c0f5dc134ed76d889e4d177d2f my-directory
160000 commit 93a431b481f9ca2b498c94b0c0641e54f00322e0 my-submodule

$ git cat-file -p 21735012b86a0c6c266eb7fb629a777ca70848c1
This is the content of 'my-file.txt'

$ git cat-file -p 4df930165b3c59c0f5dc134ed76d889e4d177d2f 
100644 file1.txt
100644 file2.txt

$ git cat-file -p 93a431b481f9ca2b498c94b0c0641e54f00322e0
fatal: Not a valid object name 93a431b481f9ca2b498c94b0c0641e54f00322e0
cat文件显示当前存储库中的对象,但它是一个子模块,是一个单独的存储库。因此,提交id 93a43…是来自不同对象存储的提交。您应该导航到子模块的目录并从那里尝试:

$ cd my-submodule
$ git cat-file -p 93a431b481f9ca2b498c94b0c0641e54f00322e0
我想象git发现一个特定的树条目是对象类型的子模块。即,如果条目类型为:

blob-它只是一个文件, 树-它是一个子目录, 提交它是一个子模块。 cat文件显示当前存储库中的对象,但它是一个子模块,是一个单独的存储库。因此,提交id 93a43…是来自不同对象存储的提交。您应该导航到子模块的目录并从那里尝试:

$ cd my-submodule
$ git cat-file -p 93a431b481f9ca2b498c94b0c0641e54f00322e0
我想象git发现一个特定的树条目是对象类型的子模块。即,如果条目类型为:

blob-它只是一个文件, 树-它是一个子目录, 提交它是一个子模块。
每个树条目中都有这些模式字符串,如ASCII文本;它们告诉Git关于目标对象的假设。但是,每个对象都有自己的类型嵌入其中,这是正确的,因此可能存在兼容性问题。blob对象是模式100644和100755文件的有效查找结果,但也适用于120000符号链接,例如;但没有其他对象类型对这三种模式有效。无论如何,这只是旁注:正如您所说,gitlink中的提交哈希是另一个存储库中的哈希ID。@torek似乎您是对的,它检查mode==160000以识别子模块:每个树条目中都有这些模式字符串,它们是ASCII文本;它们告诉Git关于目标对象的假设。但是,每个对象都有自己的类型嵌入其中,这是正确的,因此可能存在兼容性问题。blob对象是模式100644和100755文件的有效查找结果,但也适用于120000符号链接,例如;但没有其他对象类型对这三种模式有效。无论如何,这只是旁注:正如您所说,gitlink中的提交哈希是另一个存储库中的哈希ID。@torek似乎您是对的,它检查mode==160000以识别子模块: