git - 在不 check out 的情况下获取先前版本主 repo 中子模块的哈希值

标签 git git-submodules

我有一个 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

这从 tree object 中读取 gitlink 条目,some_tag可以解决,使用提供的路径。要查看其工作原理,请使用:

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

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

关于git - 在不 check out 的情况下获取先前版本主 repo 中子模块的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50392802/

相关文章:

git子模块提交/推/pull

linux - 如何检测子模块中父 Git 存储库的正确 GIT_DIR 和 GIT_WORK_TREE

C++ 与 git 和 CMake : How to build submodules with specific parameters?

git - 为什么 `git update-ref -d`不删除空的父目录?

c# - 当我使用 git 时,我应该在 C# 项目中忽略什么?

java - 从 java 运行终端命令(使用 Eclipse)

git - 在子模块中使用子模块

git - 如何将子模块添加到 gh-pages 分支并正确构建静态页面?

php - 使用 GIT 的 php 项目组织的最佳实践?

git - GitHub for Windows 可以在本地使用吗?