无需签出即可获取先前版本的主存储库中子模块的哈希值

Won*_*abo 3 git git-submodules

我有一个 repo,其中有一个子模块。

我可以轻松地从工作目录中获取子模块的当前哈希值:

cd submodule
git rev-list HEAD | head -n 1
Run Code Online (Sandbox Code Playgroud)

但是,我也对主 repo 以前版本的哈希感兴趣。如果我实际查看该版本,我可以得到它:

git checkout some_tag
cd submodule
git rev-list HEAD | head -n 1
Run Code Online (Sandbox Code Playgroud)

但是,我不能使用git checkout。有没有办法在不检查旧标签的情况下获得该哈希值?

tor*_*rek 5

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

git rev-parse some_tag:submodule
Run Code Online (Sandbox Code Playgroud)

这会使用提供的路径从可以解析到的树对象中读取gitlink条目。要查看它是如何工作的,请使用:some_tag

tree=$(git rev-parse some_tag^{tree})
git ls-tree -r $tree
Run Code Online (Sandbox Code Playgroud)

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