在不检出的情况下获取先前版本主回购中子模块的哈希值
Get hash of submodule at previous version of main repo without checking out
我有一个 repo,其中有一个子模块。
我可以轻松地从工作目录中获取子模块的当前哈希值:
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
(这也是读取HEAD
值的正确工具):
git rev-parse some_tag:submodule
这会使用提供的路径从 树对象 中读取 gitlink 条目,some_tag
可以解析到该条目。要查看其工作原理,请使用:
tree=$(git rev-parse some_tag^{tree})
git ls-tree -r $tree
(仅当子模块路径不在存储库的顶层时才需要 -r
选项)。请注意,子模块的树条目只是 160000 commit <hash> <path>
:这就是超级项目知道在子模块中使用哪个提交哈希 ID 的方式。
我有一个 repo,其中有一个子模块。
我可以轻松地从工作目录中获取子模块的当前哈希值:
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
(这也是读取HEAD
值的正确工具):
git rev-parse some_tag:submodule
这会使用提供的路径从 树对象 中读取 gitlink 条目,some_tag
可以解析到该条目。要查看其工作原理,请使用:
tree=$(git rev-parse some_tag^{tree})
git ls-tree -r $tree
(仅当子模块路径不在存储库的顶层时才需要 -r
选项)。请注意,子模块的树条目只是 160000 commit <hash> <path>
:这就是超级项目知道在子模块中使用哪个提交哈希 ID 的方式。