# why can *some* git commands not be run from within .git directory?

3 messages from 2017-11-14 to 2017-11-14. Participants: Robert P. J. Day, Bryan Turner.
Thread: https://gitlist.dev/t/47202

## Robert P. J. Day, 2017-11-14 09:18

Subject: why can *some* git commands not be run from within .git directory?
Message-ID: <alpine.LFD.2.21.1711140409020.13653@localhost.localdomain>
URL: https://gitlist.dev/e/alpine.LFD.2.21.1711140409020.13653%40localhost.localdomain

```

  just noticed something i was unaware of -- some git commands can't
be run if i'm in the .git directory, while others can. for example,
if i "cd .git", commands like this work just fine:

  $ git show
  $ git branch
  $ git log

but others seem unwilling to determine the "working tree":

  $ git status
  fatal: This operation must be run in a work tree
  $

and:

  $ git stash list
  fatal: /usr/libexec/git-core/git-stash cannot be used without a working tree.
  $

what's the distinction between commands that can work this way, and
commands that can't?

rday

p.s. i will refrain from pointing out the inconsistency in using the
phrases "work tree" and "working tree" to mean the same thing, when
there is a distinct "worktree" entity.

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                        http://crashcourse.ca

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================

```

## Bryan Turner, 2017-11-14 09:38

Subject: Re: why can *some* git commands not be run from within .git directory?
Message-ID: <CAGyf7-FSHW4DqMXt1043FjmOO8tRQHq=xFGwQgKTK06Gi+a-PA@mail.gmail.com>
URL: https://gitlist.dev/e/CAGyf7-FSHW4DqMXt1043FjmOO8tRQHq%3DxFGwQgKTK06Gi%2Ba-PA%40mail.gmail.com
In-Reply-To: <alpine.LFD.2.21.1711140409020.13653@localhost.localdomain>

```
On Tue, Nov 14, 2017 at 1:18 AM, Robert P. J. Day <rpjday@crashcourse.ca> wrote:
>
>   just noticed something i was unaware of -- some git commands can't
> be run if i'm in the .git directory, while others can. for example,
> if i "cd .git", commands like this work just fine:
>
>   $ git show
>   $ git branch
>   $ git log
>
> but others seem unwilling to determine the "working tree":

Once Git finds a .git directory, or determines it's in one, it doesn't
look "higher"; instead, it runs like it's in a bare clone. That means
any command that requires a work tree or an index generally won't
work. Of course, you can still tell Git where the work tree is and
then the commands work fine from the .git directory:

incom@Jael MINGW64 /c/Temp/example/.git (GIT_DIR!)
$ GIT_WORK_TREE=.. git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean

>
>   $ git status
>   fatal: This operation must be run in a work tree
>   $
>
> and:
>
>   $ git stash list
>   fatal: /usr/libexec/git-core/git-stash cannot be used without a working tree.
>   $
>
> what's the distinction between commands that can work this way, and
> commands that can't?
>
> rday
>
> p.s. i will refrain from pointing out the inconsistency in using the
> phrases "work tree" and "working tree" to mean the same thing, when
> there is a distinct "worktree" entity.

No you won't, clearly.

>
> --
>
> ========================================================================
> Robert P. J. Day                                 Ottawa, Ontario, CANADA
>                         https://urldefense.proofpoint.com/v2/url?u=http-3A__crashcourse.ca&d=DwIBAg&c=wBUwXtM9sKhff6UeHOQgvw&r=uBedA6EFFVX1HiLgmpdrBrv8bIDAScKjk1yk9LOASBM&m=yPGW_MCaDCBECSMjz40m8vsxUhljCB3dnrQ4TBi8PtE&s=-JNZXqYtyY7CIJGy65WWa88Kq7BaelyajFehPQZkvo4&e=
>
> Twitter:                                       https://urldefense.proofpoint.com/v2/url?u=http-3A__twitter.com_rpjday&d=DwIBAg&c=wBUwXtM9sKhff6UeHOQgvw&r=uBedA6EFFVX1HiLgmpdrBrv8bIDAScKjk1yk9LOASBM&m=yPGW_MCaDCBECSMjz40m8vsxUhljCB3dnrQ4TBi8PtE&s=-9gIAxcdRGPmIz1rpLLb7nl14azEwoE-fOJ-IxAYi18&e=
> LinkedIn:                               https://urldefense.proofpoint.com/v2/url?u=http-3A__ca.linkedin.com_in_rpjday&d=DwIBAg&c=wBUwXtM9sKhff6UeHOQgvw&r=uBedA6EFFVX1HiLgmpdrBrv8bIDAScKjk1yk9LOASBM&m=yPGW_MCaDCBECSMjz40m8vsxUhljCB3dnrQ4TBi8PtE&s=prnIhreU-Vhx0V6lRCBQEPbJk2P8bPlHcRFus1X_6wM&e=
> ========================================================================

```

## Robert P. J. Day, 2017-11-14 09:43

Subject: Re: why can *some* git commands not be run from within .git directory?
Message-ID: <alpine.LFD.2.21.1711140442180.14378@localhost.localdomain>
URL: https://gitlist.dev/e/alpine.LFD.2.21.1711140442180.14378%40localhost.localdomain
In-Reply-To: <CAGyf7-FSHW4DqMXt1043FjmOO8tRQHq=xFGwQgKTK06Gi+a-PA@mail.gmail.com>

```
On Tue, 14 Nov 2017, Bryan Turner wrote:

> On Tue, Nov 14, 2017 at 1:18 AM, Robert P. J. Day <rpjday@crashcourse.ca> wrote:
> >
> >   just noticed something i was unaware of -- some git commands can't
> > be run if i'm in the .git directory, while others can. for example,
> > if i "cd .git", commands like this work just fine:
> >
> >   $ git show
> >   $ git branch
> >   $ git log
> >
> > but others seem unwilling to determine the "working tree":
>
> Once Git finds a .git directory, or determines it's in one, it
> doesn't look "higher"; instead, it runs like it's in a bare clone.
> That means any command that requires a work tree or an index
> generally won't work. Of course, you can still tell Git where the
> work tree is and then the commands work fine from the .git
> directory:

  ah, thank you, that clarifies it.

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                        http://crashcourse.ca

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================

```
