Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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:Git ls树输出中的提交对象_Git - Fatal编程技术网

Git:Git ls树输出中的提交对象

Git:Git ls树输出中的提交对象,git,Git,我只是在一些(不是我的)回购中做了git ls tree,并在输出中看到了这一点: 100644 blob 54cfbdae80000000000000000000639faa8ecaee .gitignore 100644 blob 7c6a8bf6500000000000000000000c84e3fba06d xxx.py 040000 tree f9c9cf0760000000000000000000c6c48116bc14 yyy 160000 commi

我只是在一些(不是我的)回购中做了
git ls tree
,并在输出中看到了这一点:

100644 blob   54cfbdae80000000000000000000639faa8ecaee    .gitignore
100644 blob   7c6a8bf6500000000000000000000c84e3fba06d    xxx.py
040000 tree   f9c9cf0760000000000000000000c6c48116bc14    yyy
160000 commit 6f473ed0000000000000000000dffd4ebd48d103    zzz
040000 tree   fb81e98c40000000000000000000f90685a62410    vvv
040000 tree   642e5f2e3000000000000000000063acd187d42d    uuu
zzz
为空目录。如果我删除它,它将在
git状态中显示为change
output<代码>git状态如果我触摸其中的一些文件,将看不到任何内容


什么是
zzz
?这怎么可能呢?

尽管
zzz
条目创建了一个目录,但它并不表示一个空目录。了解这一点的关键是将其
类型
模式
与其他目录进行比较。
zzz
的模式为
160000
,类型为
commit
;树对象
yyy
vvv
uuu
,它们最终存储非空目录,具有模式
040000
和类型
tree

这意味着
zzz
条目是所谓的“gitlink”

相关联的散列ID(显然是您在上面创建的;它们有太多的零,不能重合)是Git应该签出到该目录中的子模块的散列。Git将使目录本身成为签出这个超级项目的一部分。不过,稍后Git将读取
.gitmodules
配置文件以找到相应的子项目URL:当您执行
Git submodule init
时,它将该存储库克隆到
zzz
目录中

如果使用
Git clone--recursive
进行克隆,则可以让Git在超级项目的
Git clone
过程中自动执行此操作。有关详细信息,请参阅

另见


请注意,如果路径没有
.gitmodules
条目,Git就不知道在这里克隆什么

我甚至没有想到子模块。。。但是没有
.gitmodules
文件。如果任何地方都没有
.gitmodules
文件,Git将不知道克隆什么。这可能是有人让Git创建一个空的子目录的伎俩,但它并不完全有效,因为Git坚持它应该找到一个子模块。我也看到了。