An earlier question resulted in some ideas on how to check whether your Git repo contains a dirty index or untracked files. The answer I adopted from that discussion was the following:
#!/bin/sh
exit $(git status --porcelain | wc -l)
The idea behind that answer was to emulate what the programmer would do: run git status
and then examine the output.
Unfortunately git status --porcelain
and git status
do not do exactly the same thing. In particular, git status
will report unpushed changes, while git status --porcelain
will not. Here is an example
[jarmo@localhost math-hl]$ git status --porcelain
[jarmo@localhost math-hl]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
So my question is: what do I need to add to the original script to also identify when the repo has unpushed changes? In particular, would this be a correct approach?
#!/bin/bash
if [ $(git status --porcelain | wc -l) != "0" \
-o $(git log @{u}.. | wc -l) != "0" ]; then
echo "local repo is not clean"
Would it be ok, in the long run, to rely on git log
, or should I use a "plumbing" command instead?