I wrote a command-line tool gita for this purpose. It can display the status of all repos, including the edit status, the relation to remote branch, etc. It also batch executes commands from any working directory.
You can also group the repos. For your project structure, you can run
gita add -r <root>
which will automatically add the subordinate repos into a group.
Then gita ll root
will display the relevant information. gita <command> root
will batch run the command on repos in the root group. You can surely run command on specified repos from any working directory too.
There are other functionalities such as setting context, defining custom commands, etc. Installation is pip3 install -U gita
. You can find more information on github.

The gita ll
command shows 3 possible symbols next to the branch name, which indicates
+
: staged changes
*
: unstaged changes
_
: untracked files/folders
The branch names are colored in 5 ways
color |
meaning |
white |
local has no remote |
green |
local is the same as remote |
red |
local has diverged from remote |
purple |
local is ahead of remote (good for push) |
yellow |
local is behind remote (good for merge) |