How to check the status of all git repositories at once? How to check the status of all git repositories at once? git git

How to check the status of all git repositories at once?


You could use a for loop that changes into each directory, does git status and then changes back up:

for /f "tokens=*" %a in ('dir /ad /b') do cd %a & git status & cd ..

You need to double the percentages if you use this in a batch file:

for /f "tokens=*" %%a in ('dir /ad /b') do cd %%a & git status & cd ..

Edit:

As suggested by Cupcake, you could do this instead:

for /f "tokens=*" %a in ('dir /ad /b') do git --git-dir=%a/.git --work-tree=%a status

This feels like a more robust and flexible solution (e.g. you could adapt it more easily to work with a list of paths stored in a text file).


I went with:

find . -name .git -execdir bash -c 'echo -en "\033[1;31m"repo: "\033[1;34m"; basename "`git rev-parse --show-toplevel`"; git status -s' \;

I think it's nicer because treats directories recursively.

Edited to show the name of the repo in a cleaner way.


If you are a kind of a tool-guy, you could use a little helper called RepoZ I wrote recently (and still write).

I answered a quite similar question in more detail here.

Here's a screenshot from the current development stage so hopefully you can see whether it seems helpful to you or not:

RepoZ

If you are wondering what that strings like +45 ~403 -88 mean - they are condensed status strings telling you whether there are commits to fetch or push and whether there are added/modified/deleted files locally. More detail on the project site on GitHub