git status --ignore-submodules=all
我正在寻找这个的反转,有没有办法只打印子模块的变化?比如git status --show-only-submodules
编辑:
我的脚本获取并合并子模块更改,然后获取并合并超级项目更改。现在,我需要检查新引入的超级项目更改是否包含子模块更改的SHA更新,因为我想在超级项目中执行git show HEAD^ HEAD
,在下面打印:
--- a/xyz
+++ b/xyz
@@ -1 +1 @@
-Subproject commit f991877822a8fd50b90f53894f2592a852039547
+Subproject commit f57c051f91b0948a5b8947430b516e650b50348e
从这里开始,我将取+Subproject commit
进入xyz
目录,做一个git log -1 --no-merges
并比较SHA,如果它匹配,那么我将假设超级变化包括已拉入的子模块更改。
出于这个原因,我想在超级项目中git status --some-option
时列出仅子模块更改。如果有更好的方法,请告诉我。
答案 0 :(得分:1)
显示子模块的状态。这将打印出的SHA-1 目前检查每个子模块的提交,以及 子模块路径和用于SHA-1的git描述输出。每 SHA-1可能会带有前缀 - 如果子模块不是 初始化,+如果当前检出的子模块提交没有 匹配包含存储库和U的索引中找到的SHA-1 如果子模块有合并冲突。
如果指定了--recursive,则此命令将递归到嵌套 子模块,并显示其状态。
如果您只对当前初始化的更改感兴趣 关于索引中记录的提交的子模块或 HEAD,git-status和git-diff也会提供这些信息 (并且还可以报告对子模块工作树的更改)。
答案 1 :(得分:1)
这应该是适合您的解决方案:
git submodule foreach git status
这将遍历所有子模块并执行给定的命令。来自here:
foreach [--recursive] <command>
在每个签出的子模块中计算任意shell命令。该命令可以访问变量$ name,$ path,$ sha1 和$ toplevel:$ name是相关子模块部分的名称
.gitmodules
,$ path是相对于子模块目录的名称 超级项目,$ sha1是超级项目中记录的提交, 和$ toplevel是顶级的绝对路径 上层项目。超级项目中定义的任何子模块,但不是 此命令将忽略签出。除非给出--quiet
,否则为foreach 在评估命令之前打印每个子模块的名称。如果 给出--recursive
,递归遍历子模块(即,给定的shell命令也在嵌套的子模块中计算)。一个 任何子模块中命令的非零返回都会导致 处理终止。这可以通过添加||来覆盖:到 命令结束。例如,下面的命令将显示当前的路径 检查每个子模块的提交:
git submodule foreach 'echo $path $(git rev-parse HEAD)'