无需检出主仓库旧版本,如何获取对应子模块哈希值?
无需检出主仓库旧版本获取对应子模块哈希值的方法
当然有更高效的办法,完全不用费劲检出旧标签!Git在主仓库的每个提交里,其实已经记录了当时子模块对应的提交哈希,你可以直接通过git ls-tree命令读取这个信息:
git ls-tree some_tag submodule
这个命令会输出类似这样的内容:
160000 commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0 submodule
其中第三段的那串哈希值a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0就是主仓库在some_tag版本时,子模块对应的提交哈希。
如果想直接只拿到哈希值,过滤掉多余内容,可以用awk辅助处理:
git ls-tree some_tag submodule | awk '{print $3}'
原理补充
Git把主仓库里的子模块当作一种特殊的commit类型条目存储在版本树中,每个主仓库的提交都会固定记录当时子模块的HEAD状态,所以我们不需要检出主仓库的旧版本,直接查询这个树条目就能拿到对应的子模块哈希值。
另外,你也可以用git show命令查看相关信息,不过输出会包含更多额外内容:
git show some_tag:submodule
内容的提问来源于stack exchange,提问作者WonderCsabo
相关产品推荐
相关产品推荐

