Git 在以前版本的主repo中获取子模块的哈希值,而不签出

Git 在以前版本的主repo中获取子模块的哈希值,而不签出,git,git-submodules,Git,Git Submodules,我有一个回购协议,其中有一个子模块 我可以很容易地从工作目录中获取子模块的当前哈希: cd submodule git rev-list HEAD | head -n 1 然而,我也对主回购协议以前版本的散列感兴趣。如果我真的签出该版本,我就可以得到它: git checkout some_tag cd submodule git rev-list HEAD | head -n 1 但是,我不能使用git checkout。有没有一种方法可以在不签出旧标记的情况下获得该哈希值?使用git r

我有一个回购协议,其中有一个子模块

我可以很容易地从工作目录中获取子模块的当前哈希:

cd submodule
git rev-list HEAD | head -n 1
然而,我也对主回购协议以前版本的散列感兴趣。如果我真的签出该版本,我就可以得到它:

git checkout some_tag
cd submodule
git rev-list HEAD | head -n 1

但是,我不能使用git checkout。有没有一种方法可以在不签出旧标记的情况下获得该哈希值?

使用
git rev parse
(这也是读取
头的值的正确工具):

这将使用提供的路径从树对象中读取gitlink条目,可以将
一些标记
解析到该对象。要了解其工作原理,请使用:

tree=$(git rev-parse some_tag^{tree})
git ls-tree -r $tree

(仅当子模块路径不在存储库的顶层时,
-r
选项才是必需的)。请注意,子模块的树条目只是
160000 commit
:这就是超级项目如何知道在子模块中使用哪个提交哈希ID。

btw
some_标记:
some_标记^{tree}
的缩写。
tree=$(git rev-parse some_tag^{tree})
git ls-tree -r $tree