From: Alex Riesen Date: Fri, 02 Apr 2010 20:54:28 GMT Subject: Re: git ls-files unreliable? Message-ID: In-Reply-To: <20100402180842.GA5798@twister.home> On Fri, Apr 2, 2010 at 20:08, Gabor Gombas 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 ..." to unstage) > # > #       modified:   ../../../test > # > # Changed but not updated: > #   (use "git add ..." to update what will be committed) > #   (use "git checkout -- ..." 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.