命令'git status'不显示子模块的`(新提交)`

命令'git status'不显示子模块的`(新提交)`,git,git-submodules,Git,Git Submodules,我有带有Git子模块的标准顶级Git存储库 众所周知,当顶级存储库记录的提交id与特定子模块的实际HEAD不匹配时,顶级存储库中的git status通过(新提交)报告它(例如): 问题 现在,在某些情况下,git status仅对一些子模块停止报告(新提交),即使很明显存在新提交- 它可能会错误地停止报告子模块-a.git的(新提交),同时仍正确显示子模块-b.git的(新提交) 我可以验证提交ID是否不匹配: 顶级存储库的“想法”: 子模块存储库的“想法”: 顺便说一句,顶级和子模块存

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

众所周知,当顶级存储库记录的提交id与特定子模块的实际
HEAD
不匹配时,顶级存储库中的
git status
通过
(新提交)
报告它(例如):

问题 现在,在某些情况下,
git status
仅对一些子模块停止报告
(新提交)
,即使很明显存在新提交- 它可能会错误地停止报告
子模块-a.git的
(新提交)
,同时仍正确显示
子模块-b.git的
(新提交)

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

  • 顶级存储库的“想法”:

  • 子模块存储库的“想法”:

  • 顺便说一句,顶级和子模块存储库都处于清除状态:

    顶层(注意
    子模块-a.git
    缺少条目):

这是一个问题,因为我也无法更新顶级存储库记录的此类子模块的提交ID(如在
git add--all&&git commit
中),因为它只是“认为”没有要更新的内容

平台/版本:GNU/Linux 4.2.6-200.fc22.x86_64,git版本2.4.3(也在2.5.0上确认)

问题:
这是一个bug还是某个地方有一个选项可以禁用此类
(新提交)
报告?

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

所以,它一定是git以前版本中的一个bug



一个回顾性的观察——我从来没有用短分支名称手动复制过东西。在CI中出现的问题是,在100(每个构建一个)的时间内创建了许多自动分支,长名称约120多个字符。这些情况可能会影响Git中一些未处理的边缘情况。

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

在子模块内部运行时,如果没有显示新的提交,您能添加git状态输出吗?@mu無 - 我已直接更新到问题描述中。经过一些测试,我坚信这是一个bug。然而,我还没有找到重现这个问题的简单步骤。Git不知怎么就变成了这种状态。当从顶层运行时,是否使用
Git diff--submodule
命令有任何相关/正确的输出?@dopeddude,时间太长了。。。在顶层/父repo中添加了git diff--submodule
的输出=无输出。这个问题仍然存在。我想我需要尝试在公开的存储库中复制它。当使用Git
2.7.4
测试它时,问题消失了。
modified:   submodule-a.git (new commits)
modified:   submodule-b.git (new commits)
> git ls-tree HEAD submodule-a.git
160000 commit edff703c82e270afbabc4ac4b571fdbdaefd88bc  submodule-a.git
> cd submodule-a.git
> git rev-parse HEAD
1b66fb09ca9506f1b707fe28135cb3c07c2cd717
 > git status
 On branch master
 Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)

         modified:   submodule-b.git (new commits)

 no changes added to commit (use "git add" and/or "git commit -a")
 > git diff --submodule
 # [NO OUTPUT]
 > cd submodule-a.git
 > git status
 On branch master
 nothing to commit, working directory clean