命令“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 不匹配:
什么顶级仓库"thinks":
> git ls-tree HEAD submodule-a.git
160000 commit edff703c82e270afbabc4ac4b571fdbdaefd88bc submodule-a.git
什么子模块存储库"thinks":
> 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,因为它只是 "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 状态未显示子模块的状态。我决定从头开始重新克隆项目,在提交更改时我切换了父存储库的分支,然后突然出现了所有子模块更改。我切换回了我们的主要开发分支,子模块的更改仍在显示,所以关于切换分支的一些事情似乎破坏了某种缓存或类似的东西。
我有带 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 不匹配:
什么顶级仓库"thinks":
> git ls-tree HEAD submodule-a.git 160000 commit edff703c82e270afbabc4ac4b571fdbdaefd88bc submodule-a.git
什么子模块存储库"thinks":
> 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,因为它只是 "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 状态未显示子模块的状态。我决定从头开始重新克隆项目,在提交更改时我切换了父存储库的分支,然后突然出现了所有子模块更改。我切换回了我们的主要开发分支,子模块的更改仍在显示,所以关于切换分支的一些事情似乎破坏了某种缓存或类似的东西。