Git - 在子模块 'git status' 中没有像在根仓库中那样提供 "is up-to-date" 信息

Git - in submodule 'git status' does not give "is up-to-date" info as in root repo

我有一个带有子模块的 git 仓库。 在根仓库中,git status 给出了分支与远程分支相比的状态。例如:

On branch develop
Your branch is up-to-date with 'origin/develop'.

但是在子模块仓库中,我没有第二行。 如何在所有子模块中获取此信息?谢谢。

当您使用 Git 个子模块时,您的子模块的状态将默认为分离 HEAD。

当你运行 git submodule update时,无论是第一次还是其他人为子模块推送了新的提交,Git 都会检查根项目的sha1说子模块应该在。

例如

> git submodule update
> cd <submodule>
> git status
HEAD detached at 59fe3c5232
nothing to commit, working directory clean

现在,我可以使用 git log:

查看更多信息
> git log --all --decorate --graph --format=oneline
* 59fe3c5232 (HEAD, origin/master, master) Commit details
* 8762eca8d9 Older commit
...

当有分支时,该日志会更有趣:查找 HEAD 以查看您所在的位置。

以我的示例为例,如果我现在在子模块内执行 git checkout master,我仍处于根存储库预期的提交中,但我也在跟踪子模块内的主分支。

> git checkout master
> git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

但是,如果我要签出不是根存储库预期的提交,那么根存储库将认为需要提交更改。 (在根仓库中执行 git diffgit status 以查看。)

如果团队中的其他人向子模块推送提交,下次我更新根存储库并执行 git submodule update 时,我将最终回到分离头模式。

如果我真的在处理那个子模块,我只会费心检查子模块中的一个分支。