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。btwsome_标记:
是some_标记^{tree}
的缩写。
tree=$(git rev-parse some_tag^{tree})
git ls-tree -r $tree