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

Re: What is the reason behind not hiding git worktrees from git?

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Oct 1, 2025, 21:29 UTC
Message-ID
<CAPig+cQgZijWi8VV1_QScKPhm9cqhQVvow4N-VH00R4oO1m2xA@mail.gmail.com>
In-Reply-To
<xmqqa52a1h6x.fsf@gitster.g>
On Wed, Oct 1, 2025 at 4:49 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 15 quoted lines
> Sergey Organov <sorganov@gmail.com> writes:
> > Also, I'm almost sure that the first thing almost every worktree novice
> > does (I did), quite naturally, is:
> >
> > $ git wotktree add <branch>
> >
> > that happily succeeds /anywhere/ inside primary worktree without any
> > warning for me. It probably should either have created $top/../<branch>
> > instead, or refuse to proceed without confirmation in the first place.
>
> Yeah, I almost never type 'git worktree add <directory>' without
> "../" at the beginning of the directory, and every time I do so, I
> do wonder if this is a UI pitfall that we should warn the users
> about.  Perhaps we should start from documentation updates and
> possibly a new warning or two?

Every example in the git-worktree documentation which mentions a literal path (as opposed to generic <path>) already uses the "../" prefix (and has from inception), including the example in the introductory paragraphs:

    For instance, `git worktree add ../hotfix` creates new branch hotfix
    and checks it out at path `../hotfix`.
and the "real" Example block toward the end of the man page:
    $ git worktree add -b emergency-fix ../temp master
    $ pushd ../temp
    # ... hack hack hack ...
    $ git commit -a -m 'emergency fix for boss'
    $ popd
    $ git worktree remove ../temp
There are exactly zero examples in the man page lacking the "../" prefix.

It would be possible, of course, to add a "best practices" section to the introductory paragraphs advising against creating worktrees as subdirectories of the "main" worktree (assuming people even agree that a best practice is to place worktrees elsewhere). However, considering that the existing examples using "../" have been ignored (in a fashion), one wonders how much a "best practices" discussion would help (assuming people aren't really reading the documentation anyhow, and may very well be cargo-culting git-worktree commands from blogs or external tutorials).

Regarding issuing warnings: I'm not fond of the idea. There are plenty of people who already locate worktrees as subdirectories of the main worktree[*] and do so without problem, and for whom it is a preferred workflow, so I don't see why we would want to penalize them by warning against doing so, especially since there is no technical reason to avoid the practice (i.e. Git handles it just fine). The only minor downside of the practice (if one considers it a downside) is an aesthetic one: having to update ".gitignore" or ".git/info/exclude", or to simply consider them "visual noise" in git-status output and skip over them when scanning the output. Moreover, I think this is the first time that we have (on the list, at least) heard a complaint about the "noise", which may suggest that this is a non-issue for most people, and that a warning telling people to avoid the practice would be unwelcome.

Aside: It might be valuable to extend the documentation to add a
discussion about hanging worktrees off of a bare repository. People do
use such a workflow, and git-worktree officially supports it, but I
don't think there is any in-project documentation which mentions it.
FOOTNOTES

[*]: There have been numerous emails on the list showing that placing worktrees as subdirectories of the main worktree is common enough practice. And, as far as "experienced users" are concerned (not just novices picking up the practice from blogs or tutorials), I recall an email discussion in which Dscho has said that he locates worktrees as subdirectories of the main worktree, as well. I, too, have done so on occasion.

Previous: Junio C HamanoNext: Junio C Hamano
Message 16 of 44 in “What is the reason behind not hiding git worktrees from git?”
  1. Jakub T. JankiewiczSep 27, 2025
  2. Junio C HamanoSep 27, 2025
  3. Michal SuchánekSep 27, 2025
  4. Jason ChoSep 27, 2025
  5. Jason ChoSep 27, 2025
  6. Michal SuchánekSep 30, 2025
  7. Junio C HamanoSep 30, 2025
  8. Michal SuchánekNov 19, 2025
  9. Michal SuchánekSep 30, 2025
  10. Ben KnobleOct 1, 2025
  11. Junio C HamanoOct 1, 2025
  12. Sergey OrganovOct 1, 2025
  13. Junio C HamanoOct 1, 2025
  14. Jakub T. JankiewiczOct 1, 2025
  15. Junio C HamanoOct 1, 2025
  16. Eric SunshineOct 1, 2025
  17. Junio C HamanoOct 1, 2025
  18. Michal SuchánekOct 2, 2025
  19. Junio C HamanoOct 2, 2025
  20. 1/2 doc: git-worktree: Link to examplesMichal Suchanek, Oct 2, 2025
  21. Kristoffer HaugsbakkOct 2, 2025
  22. Junio C HamanoOct 2, 2025
  23. Michal SuchánekOct 2, 2025
  24. Jean-Noël AVILAOct 5, 2025
  25. Michal SuchánekOct 10, 2025
  26. 1/2 doc: git-worktree: Link to examplesMichal Suchanek, Oct 10, 2025
  27. Eric SunshineOct 11, 2025
  28. 2/2 doc: git-worktree: Add side by side branch checkout exampleMichal Suchanek, Oct 10, 2025
  29. Eric SunshineOct 11, 2025
  30. Junio C HamanoOct 23, 2025
  31. Michal SuchánekOct 24, 2025
  32. Eric SunshineOct 24, 2025
  33. Michal SuchánekNov 18, 2025
  34. Eric SunshineNov 19, 2025
  35. Junio C HamanoJan 20, 2026
  36. 2/2 doc: git-worktree: Add side by side branch checkout exampleMichal Suchanek, Oct 2, 2025
  37. Kristoffer HaugsbakkOct 2, 2025
  38. Michal SuchánekOct 2, 2025
  39. Junio C HamanoOct 2, 2025
  40. Junio C HamanoOct 2, 2025
  41. Michal SuchánekOct 2, 2025
  42. Johannes SchindelinNov 17, 2025
  43. Junio C HamanoNov 17, 2025
  44. Ben KnobleOct 2, 2025

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.