繁体   English   中英

查找 git 中的所有子模块及其提交

[英]Find all submodules in git and their commits

我的 git 存储库中有一个项目,其中包含子模块,这些子模块包含 feather 子模块。

由于我不对所有子模块负责,所以我不知道在更新我正在查看的提交后那里发生了什么变化。 出于这个原因,我想记录当前的 state。

这意味着,我想知道我正在使用的所有子模块(显式和非显式)。 对于每个子模块,我想知道它的标签和/或提交。

我发现:

git ls-files --stage

有帮助,但只显示来自我的存储库的提交,而不是子模块内部的提交。

任何的想法?

git submodule foreach --recursive "git describe --tags HEAD --exact-match 2>/dev/null || git rev-parse HEAD"

在每个子模块中递归运行命令git describe --tags HEAD --exact-match 2>/dev/null || git rev-parse HEAD git describe --tags HEAD --exact-match 2>/dev/null || git rev-parse HEAD

首先,尝试找到恰好指向每个子模块的头提交的最新标签。 如果未找到标签,则返回提交。

git ls-files --stage

有帮助,但只显示来自我的存储库的提交,而不是子模块内部的提交。

在 Git 2.36(2022 年第 2 季度)之前,“ls-files”的许多 output 模式无法使用其“--recurse-submodules”选项,但“--stage”模式现在已被教导可以使用它。

请参阅Jonathan Tan ( jhowtan )提交 290eada (2022 年 2 月 23 日)。
(由Junio C Hamano 合并gitster 提交 7a4e06c ,2022 年 3 月 6 日)

ls-files : 支持--recurse-submodules --stage

签字人:Jonathan Tan

e77aa33 (“ ls-files :可选地递归到子模块”,2016 年 10 月 10 日,Git v2.11.0-rc0 - 合并列在批次 #11中)教ls-files --recurse-submodules参数,但仅在有限的情况。

特别是, --stage不受支持,可能是因为没有repo_find_unique_abbrev() ,它仅在8bb9557中引入(" sha1 -name.c``: add repo_find_unique_abbrev_r() ", 2019-04-16, Git v2.22.0 -rc0—— 合并第 8 批中列出)。

--recurse-submodules与 --stage 一起使用需要这个 function。

git ls-files现在包含在其手册页中:

--recurse-submodules

在存储库中的每个活动子模块上递归调用ls-files

目前仅支持--cached--stage模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM