git status --ignore-submodules=all
Run Code Online (Sandbox Code Playgroud)
我正在寻找与此相反,有没有办法只打印子模块更改?喜欢git status --show-only-submodules
编辑:我的脚本获取并合并子模块更改,然后获取并合并超级项目更改。现在,我需要检查新引入的超级项目更改是否包括子模块更改的SHA更新,为此我想git show HEAD^ HEAD在超级项目中执行此操作,如下所示:
--- a/xyz
+++ b/xyz
@@ -1 +1 @@
-Subproject commit f991877822a8fd50b90f53894f2592a852039547
+Subproject commit f57c051f91b0948a5b8947430b516e650b50348e
Run Code Online (Sandbox Code Playgroud)
从这里,我将进入+Subproject commit并进入xyz目录,执行a git log -1 --no-merges并比较SHA,如果匹配,那么我将假定超级更改包括已引入的子模块更改。
因此,在超级项目中时,我只想列出子模块的更改git status --some-option。请让我知道是否有更好的方法可以做到这一点。
and*_*eee 14
这应该是适合您的解决方案:
git submodule foreach git status
Run Code Online (Sandbox Code Playgroud)
这将遍历所有子模块并执行给定的命令。从这里:
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)'
\n\n显示子模块的状态。这将打印每个子模块当前签出的提交的 SHA-1,以及 SHA-1 的子模块路径和 git 描述的输出。如果子模块未初始化,每个 SHA-1 可能会以 - 为前缀;如果当前签出的子模块提交与包含存储库和 U 的索引中找到的 SHA-1 不匹配,则每个 SHA-1 可能会以 + 为前缀。如果子模块存在合并冲突。
\n\n如果指定了 --recursive,此命令将递归到嵌套子模块,并显示它们的状态。
\n\n如果您只对当前初始化子模块相对于索引或 HEAD 中记录的提交的更改感兴趣,则 git-status 和 git-diff 也将提供该信息(并且还可以将更改报告给子模块\xe2\x80\x99s工作树)。
\n