命令“git 状态”不显示子模块的“(新提交)”

Command `git status` does not show `(new commits)` for submodules

我有带 Git 个子模块的标准顶级 Git 存储库。

已知当顶级存储库记录的提交 ID 与特定子模块的实际 HEAD 不匹配时,来自顶级存储库的 git status 通过 (new commits) 报告它(例如):

modified:   submodule-a.git (new commits)
modified:   submodule-b.git (new commits)

问题

现在,在某些情况下,即使很明显有新提交,git status 也会停止报告 (new commits) 部分子模块 - 它可能会错误地停止为 submodule-a.git 报告 (new commits),同时仍然为 submodule-b.git.

正确显示 (new commits)

我可以验证提交 ID 不匹配:

这是一个问题,因为我也无法更新(如 git add --all && git commit)顶级存储库记录的此类子模块的提交 ID,因为它只是 "thinks" 没有什么可更新的.

Platform/Version: GNU/Linux 4.2.6-200.fc22.x86_64, git 版本2.4.3 (也在 2.5.0 上得到确认)。

问题

这是一个错误还是某个地方有一个选项可以禁用这样的 (new commits) 报告?

我重新确认了这个问题。然后我(就地)将 OS 升级到最近发布的 Fedora 24(默认情况下有 Git 2.7.4)——保留了相同的文件系统内容(存储库和配置)。然后问题就消失了。

所以,这一定是git以前版本的一个错误。


一个回顾性观察——我从来没有设法使用短分支名称手动重现事物。问题出现在 CI 中,当时创建了许多自动分支 ~ 100(每个构建一个)长名称 ~ 120+ 个字符。这些情况可能会在 Git.

中遇到一些未处理的边缘情况

(不是答案)我最近在 macOS mojave 上使用 git 2.23.0 时遇到了类似的问题 - git 状态未显示子模块的状态。我决定从头开始重新克隆项目,在提交更改时我切换了父存储库的分支,然后突然出现了所有子模块更改。我切换回了我们的主要开发分支,子模块的更改仍在显示,所以关于切换分支的一些事情似乎破坏了某种缓存或类似的东西。