This does rather more than it needs. A form of `if [[...?]] ; then exit 0 ; else exit 1 ; fi` can be replaced by `[[...?]]` as shell scripts exit with the return code of the last command they ran.
The grep is not needed, as `git status --untracked-files=no --porcelain` will filter out untracked files.
Finally `git status` has an exit code already. It happens to be inverted from the one you want, but iy you can tolerate that then adding a `-q` will give you a command that returns 1 if everything is clean and 0 if there is anything dirst or an error occurs.
– Anonymous 2019-05-27 18:47 UTC
A remark: I am a big fan of Emacs & Magit, however for these kind of problems (checking for uncommitted changes etc.. .multiple repos) I use this command line tool: mr (aka “my repos”) which I find really useful:
https://myrepos.branchable.com/
https://pixorblog.wordpress.com/2019/02/05/managing-a-collection-of-git-repositories/
– Anonymous 2019-05-28 09:23 UTC
You can also use `git diff` or one of its variants to for the same purpose:
git diff --exit-code --name-status HEAD
With `git-diff`, you can customize the output to any granularity you want.
Remember that magit already provides a command for checking the statuses of multiple reposiories: `magit-list-repositories`, though I’m not a big fan of it, because it is slow.
– Akira Komamura 2019-05-29 12:58 UTC
Wow, thanks for all these comments!
As for the if-then-else stuff, I obviously have other things inside - exit 0
and exit 1
were just examples. I didn’t know about --untracked-files=no
, though I guess I knew about -q
.
As for mr
, I will have to look into it – thanks!
Finally, I will also study the git-diff
manual and magit-list-repositories
.
Thanks again!
– Marcin Borkowski 2019-06-03 18:49 UTC