[英]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``: addrepo_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.