如何git状态(或显示)仅子模块的变化?

rod*_*dee 5 git

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)'


Fab*_* H. 2

git submodule status

\n\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
\n

  • 我认为OP对子模块工作目录的更改感兴趣;正如上一段所述,这些不会由 `git-submodule-status` 报告。 (3认同)