我有一个带子模块的git repo。在根目录中,与远程分支相比,git status
为我提供了分支的状态。例如:
On branch develop
Your branch is up-to-date with 'origin/develop'.
但是在submodule repo中,我没有第二行。如何在所有子模块中获取此信息?谢谢。
当您使用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 diff
或git status
来看看。)
如果团队中的其他人推送子模块的提交,下次我更新根目录并执行git submodule update
时,我将以分离头模式返回。
如果我真的正在处理那个子模块,我只打算检查子模块中的分支。