Git - 在子模块'git status'中没有像root repo那样给出“是最新的”信息

问题描述 投票:0回答:1

我有一个带子模块的git repo。在根目录中,与远程分支相比,git status为我提供了分支的状态。例如:

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

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

git git-submodules git-status
1个回答
1
投票

当您使用Git子模块时,默认情况下子模块的状态将被分离HEAD。

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

EG

> 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

但是如果我要检查一个不是root repo所期望的提交,那么root repo会考虑需要提交的更改。 (根据回购中的git diffgit status来看看。)

如果团队中的其他人推送子模块的提交,下次我更新根目录并执行git submodule update时,我将以分离头模式返回。

如果我真的正在处理那个子模块,我只打算检查子模块中的分支。

© www.soinside.com 2019 - 2024. All rights reserved.