Subject: Re: describe with --git-dir and --dirty outside of the repo always says dirty

From: Patrick Steinhardt <[email-masked]>
Date: Mon, 16 Mar 2026 09:22:16 +0100

On Fri, Mar 13, 2026 at 01:29:29PM -0700, Junio C Hamano wrote:
> Thomas Braun <[email-masked]> writes:
> 
> > When I do
> >
> > git describe --dirty
> >
> > in clean repo of git.git I get
> >
> > v2.53.0-522-g67006b9db8
> >
> > but when I do it from outside of the repo
> >
> > cd ..
> > git --git-dir=git/.git describe --dirty
> 
> "--git-dir" tells git "I am at the root of the working tree, but the
> git directory that you usually find at ".git" (or a parent directory
> of where we are) is not where you expect but somewhere else, so I am
> telling you where it is with this argument.
> 
> So if you are not at the root of the working tree for that working
> tree, "git --git-dir=git/.git diff" would report that you have a ton
> of changes to working tree files, and "describe" would report that
> your working tree is dirty.
> 
> In other words, working as intended.
> 
> You can tell where the working tree is (instead of telling the
> command that you are at the root of the working tree, when you are
> not), with the "--work-tree" option.
> 
> $ git --git-dir=git/.git --work-tree=git describe --dirty

You can do that, but what you're probably looking for is `-C`:

    $ git -C /path/to/git describe --dirty

As Junio pointed out, "--git-dir" has a different effect, and you
typically don't have to use it unless you're doing weird stuff.

Patrick