我有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)
报告?
答案 0 :(得分:0)
我重新证实了这个问题。然后我(就地)将操作系统升级到最近发布的Fedora 24(默认情况下有Git 2.7.4
) - 保留了相同的文件系统内容(存储库和配置)。问题就消失了。
所以,它一定是以前版本的git中的一个错误。
一个回顾性观察 - 我从未设法使用短分支名称手动重现事物。当在大约100(每个构建一个)的时间内创建了许多自动分支时,问题出现在CI中,其中长名称大约120个字符。这些情况可能会在Git中遇到一些未处理的边缘情况。
答案 1 :(得分:0)
(不是一个答案)我最近在macOS mojave上的git 2.23.0发生了类似的问题-git status未显示子模块的状态。我决定只从头开始重新克隆项目,而在提交更改时,我切换了父存储库的分支,然后出现了所有突然的子模块更改。我切换回我们的主要dev分支,并且仍在显示子模块更改,因此有关切换分支的事情似乎破坏了某种缓存或类似的东西。