在以前版本的主仓库中获取子模块的哈希,而不检查

时间:2018-05-17 13:32:33

标签: 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 。有没有办法获得该哈希而不检查旧标签?

1 个答案:

答案 0 :(得分:4)

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

git rev-parse some_tag:submodule

这将使用提供的路径从树对象中读取可以解析some_tag gitlink 条目。要了解它的工作原理,请使用:

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

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