Git 在哪里存储子模块提交的 SHA1?
我知道,当您将子模块添加到 git 存储库时,它会跟踪其 sha1 引用的该子模块的特定提交。
我正在尝试查找此 sha1 值的存储位置。
.gitmodules
和 .git/config
文件仅显示子模块的路径,但不显示提交的 sha1。
git-submodule(1) 参考仅涉及 gitlink
条目和 < href="http://www.kernel.org/pub/software/scm/git/docs/gitmodules.html">gitmodules(5) 参考也没有说明这一点。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它直接存储在Git的对象数据库中。子模块所在目录的树对象将有一个子模块提交的条目(这就是所谓的“gitlink”)。
尝试执行
git ls-tree master
(或者如果子模块位于顶层,则仅执行git ls-tree master
目录)。It is stored in Git's object database directly. The tree object for the directory where the submodule lives will have an entry for the submodule's commit (this is the so-called "gitlink").
Try doing
git ls-tree master <path-to-directory-containing-submodule>
(or justgit ls-tree master
if the submodule lives in the top-level directory).对象数据库 (
$GIT_DIR/objects/
)存储子模块树对象的位置最近正在不断发展:随着 Git 2.34(2021 年第 4 季度),生成“
git grep
"(man) 递归到子模块已更新为从添加子模块对象存储迁移为备用对象存储”机制(这是次优的)。请参阅 提交 18a2f66、提交 e3e8bf0, 提交0693806,提交 dd45471,提交 78ca584, 提交 50d92b5,提交 8d33c3a,提交 a35e03d(2021 年 8 月 16 日),作者:Jonathan Tan (
jhowtan
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 11e5d0a,2021 年 9 月 20 日)The object database (
$GIT_DIR/objects/
) where the submodule tree object is stored, is evolving recently:With Git 2.34 (Q4 2021), the code to make "
git grep
"(man) recurse into submodules has been updated to migrate away from the add submodules object store as an alternate object store" mechanism (which is suboptimal).See commit 18a2f66, commit e3e8bf0, commit 0693806, commit dd45471, commit 78ca584, commit 50d92b5, commit 8d33c3a, commit a35e03d (16 Aug 2021) by Jonathan Tan (
jhowtan
).(Merged by Junio C Hamano --
gitster
-- in commit 11e5d0a, 20 Sep 2021)