git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: GIT_DIR output from git worktree list

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Sep 30, 2020, 20:35 UTC
Message-ID
<CAPig+cSzVVdiH62Gc-ww56OFfPh4-2+3_paWEJf085TgC=nNvg@mail.gmail.com>
In-Reply-To
<335b6e6a-9527-5444-da80-08faf43db606@gmail.com>
On Wed, Sep 30, 2020 at 3:34 AM Gabriel Nützi <gnuetzi@gmail.com> wrote:
Show 10 quoted lines
> Am 30.09.2020 um 07:33 schrieb Eric Sunshine:
> > Because the implementation doesn't really look for or know where the
> > main worktree is. Instead, it's taking the path of the repository and
> > stripping off "/.git" if present, and reporting that as the main
> > worktree. [...]
>
> Ok, it's kind of sad that as far as I understood, there is probably
> always only this heuristic about stripping ".git" because the main
> worktree path is not registered inside the .git dir or somewhere
> else.

This is, of course, an artifact of Git's history. While Git itself is reasonably old at this point, linked worktrees are a relatively recent invention, and there had never been a reason to record the path of the main worktree anywhere. Also, not recording the path allows the project directory to be relocated easily if needed.

> I mean you can technically name the git directory what ever you want
> and in that case how is that stripping than going to work?  But of
> course when you do so, you probably need to set either GIT_DIR, or
> or use --git-dir

I don't think it's accurate to say that "you can technically name the git directory what ever you want". The only _blessed_ name for that directory is `.git/` if you expect any sort of automatic behavior regarding repository discovery and determination of the top level of a worktree.

Certainly, you're free to locate the repository elsewhere -- or name it something else -- but when you do so, you knowingly give up the convenience of the automatic behaviors, and instead have to rely upon --git-dir, GIT_DIR and --worktree, GIT_WORK_TREE, and core.worktree, which is why those exist.

(Rather than --git-dir, --git-work-tree and cousins, you could also place a "gitfile" named `.git` in the main worktree referencing the actual repository path, and by doing so regain all the automatic behaviors. Alternately, `git init --separate-git-dir` could set this up for you.)

At any rate, the above comments aside, as mentioned previously, a way forward might be to teach git-worktree to consult --work-tree, GIT_WORK_TREE, core.worktree when computing the path of the main worktree. The fact that it doesn't yet do so is merely an oversight, I think; one of the several such oversights during initial development, some of which have already been corrected.

Show 6 quoted lines
> Also what I realized is, isn't the doc a bit inexact about GIT_DIR:
>
> > GIT_DIR is the location of the .git folder.
>
> Shouldn't it read: GIT_DIR is the path of the .git folder. Location
> could mean its the parent folder? Hm...

That might indeed be an improvement. Perhaps submit a patch making this change?

Previous: Gabriel NütziNext: Eric Sunshine
Message 4 of 9 in “GIT_DIR output from git worktree list”
  1. Gabriel NütziSep 29, 2020
  2. Eric SunshineSep 30, 2020
  3. Gabriel NütziSep 30, 2020
  4. Eric SunshineSep 30, 2020
  5. Eric SunshineDec 7, 2020
  6. Ganriel NütziDec 7, 2020
  7. Eric SunshineDec 8, 2020
  8. Duy NguyenDec 9, 2020
  9. Eric SunshineDec 13, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.