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坚持它应该找到一个子模块。我也看到了。