命令`git status`不显示子模块的`(new commit)

时间:2016-03-05 16:27:35

标签: git git-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),即使很明显有新的提交 - 它可能会错误地停止为(new commits)报告submodule-a.git,同时仍然(new commits)正确显示submodule-b.git

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

  • 什么顶级存储库“认为”:

    > git ls-tree HEAD submodule-a.git
    160000 commit edff703c82e270afbabc4ac4b571fdbdaefd88bc  submodule-a.git
    
  • 子模块库“认为”:

    > cd submodule-a.git
    > git rev-parse HEAD
    1b66fb09ca9506f1b707fe28135cb3c07c2cd717
    
  • 顺便说一句,顶级和子模块存储库都处于干净状态:

    顶级(请注意submodule-a.git的缺失条目):

     > 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
    

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

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

问题

这是一个错误还是某个选项可能会禁用此类(new commits)报告?

2 个答案:

答案 0 :(得分:0)

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

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

一个回顾性观察 - 我从未设法使用短分支名称手动重现事物。当在大约100(每个构建一个)的时间内创建了许多自动分支时,问题出现在CI中,其中长名称大约120个字符。这些情况可能会在Git中遇到一些未处理的边缘情况。

答案 1 :(得分:0)

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