On Fri, Apr 2, 2010 at 20:08, Gabor Gombas <gombasg@xxxxxxxxxxxx> wrote: > Hi, > > I want to verify from a script that the working directory is clean. Some > time ago Linus suggested to use "git diff --quiet --cached" followed by In your script, you seem to have missed the "diff" part > "git ls-files --exclude-standard -o -d -m -u". But: > > $ git status > # On branch git_workdir_check > # Your branch is ahead of 'origin/master' by 1 commit. > # > # Changes to be committed: > # (use "git reset HEAD <file>..." to unstage) > # > # modified: ../../../test > # > # Changed but not updated: > # (use "git add <file>..." to update what will be committed) > # (use "git checkout -- <file>..." to discard changes in working > # directory) > # > # modified: ../../../test > # Here. Were is your call to "git diff --cached"? > $ git ls-files --exclude-standard -o -d -m -u > $ echo $? > 0 This is correct. > So there _were_ uncommitted changes, "git status" showed them, but "git > ls-files" did not. Because it is not supposed to. The command "git ls-files" just shows the files not known to git. You have to parse the output. Not that it is complicated in this particular case: you consider the workdir unclean on any output. > Restriction: any solutions must work with git versions as old as 1.5.4. It probably will, but please check "git diff --cached" exit code. It may be always 0, in which case you'll have to fallback to output parsing here too. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html