* What is the reason behind not hiding git worktrees from git?
@ 2025-09-27 13:28 Jakub T. Jankiewicz
2025-09-27 16:52 ` Junio C Hamano
0 siblings, 1 reply; 43+ messages in thread
From: Jakub T. Jankiewicz @ 2025-09-27 13:28 UTC (permalink / raw)
To: git
Hi,
I use git since 2010, but I've discovered git work trees recently.
Why git work trees are are not automatically ignored by git?
It would kind if silly to add the whole project on different branch to the
main repo.
This is an example:
git worktree add base
git status
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
base/
nothing added to commit but untracked files present (use "git add" to track)
What is the rationale for this. Why base/ is not automatically ignored and
you need to add it to the .gitignore by hand?
I use git 2.51.0 from Fedora default repo.
--
Jakub T. Jankiewicz, Senior Front-End Developer
https://jakub.jankiewicz.org
https://lips.js.org
https://koduj.org
^ permalink raw reply [flat|nested] 43+ messages in thread* Re: What is the reason behind not hiding git worktrees from git? 2025-09-27 13:28 What is the reason behind not hiding git worktrees from git? Jakub T. Jankiewicz @ 2025-09-27 16:52 ` Junio C Hamano 2025-09-27 17:55 ` Michal Suchánek 0 siblings, 1 reply; 43+ messages in thread From: Junio C Hamano @ 2025-09-27 16:52 UTC (permalink / raw) To: Jakub T. Jankiewicz; +Cc: git "Jakub T. Jankiewicz" <jcubic@jcubic.pl> writes: > Why git work trees are are not automatically ignored by git? Because there is no reason to ignore them, and ignoring them would be annoyingly inconvenient. Worktrees are not special and treated the same way as an ordinary Git working tree with embedded .git directory. That is, if you "git clone" somebody else's project into your current directory, when you are in the working tree of you git repository, that working tree of the cloned repository would appear as an untracked content from the point of view of the containing repository of yours. It is up to you to add it as a subproject, or leave it as an untracked directory. If you do not want to see a new worktree as an untracked directory in another repository, do not do $ git worktree add base in the first place. You are creating the new worktree _inside_ an existing repository's working tree, and it is no surprise that the new directory appears as an untracked directory. In other words, if it hurts, don't do it. Instead, you can create your additional worktree outside the working tree you are using. For example, I keep a handful of worktrees just next to my primary working tree, by doing something like $ git worktree add --detach ../git.maint maint $ git worktree add --detach ../git.next next $ git worktree add --detach ../git.seen seen when I am in my primary working tree. Then I can leave some work in progress in my primary working tree and then context switch out to $ cd ../git.next && git reset --hard next $ do stuff on next any one of these additional worktrees. Hope this helps. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-27 16:52 ` Junio C Hamano @ 2025-09-27 17:55 ` Michal Suchánek 2025-09-27 21:08 ` Jason Cho 0 siblings, 1 reply; 43+ messages in thread From: Michal Suchánek @ 2025-09-27 17:55 UTC (permalink / raw) To: Junio C Hamano; +Cc: Jakub T. Jankiewicz, git On Sat, Sep 27, 2025 at 09:52:56AM -0700, Junio C Hamano wrote: > "Jakub T. Jankiewicz" <jcubic@jcubic.pl> writes: > > > Why git work trees are are not automatically ignored by git? > > Because there is no reason to ignore them, and ignoring them would > be annoyingly inconvenient. Worktrees are not special and treated > the same way as an ordinary Git working tree with embedded .git > directory. Sure, that's another repository. It does not not show its own .git directory as untracked files although it is in the main worktree, though. So why another worktree of the same repository is shown? That can be seen as inconsistent. Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-27 17:55 ` Michal Suchánek @ 2025-09-27 21:08 ` Jason Cho 2025-09-27 21:26 ` Jason Cho 2025-09-30 10:37 ` Michal Suchánek 0 siblings, 2 replies; 43+ messages in thread From: Jason Cho @ 2025-09-27 21:08 UTC (permalink / raw) To: Michal Suchánek; +Cc: Junio C Hamano, Jakub T. Jankiewicz, git > It does not not show its own .git directory as untracked files > > That can be seen as inconsistent. Well, I see your point. Since the .git directory is from a git repo, the directory is ignored by git. Therefore, you want git to also ignore other items derived from the repo, including work trees. However, this is a minor improvement and I suspect your proposed feature may have an unknown impact. Anyway, what's your real use case? Do you really add hundreds of work trees within the same repo directory so that you hate to see them in git status? ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-27 21:08 ` Jason Cho @ 2025-09-27 21:26 ` Jason Cho 2025-09-30 10:30 ` Michal Suchánek 2025-09-30 10:37 ` Michal Suchánek 1 sibling, 1 reply; 43+ messages in thread From: Jason Cho @ 2025-09-27 21:26 UTC (permalink / raw) To: Michal Suchánek; +Cc: Junio C Hamano, Jakub T. Jankiewicz, git I think the best practice is to not add a work tre within the master work tree. Suppose a repo is at the master branch, and you export a work tree in the directory f. Then, you check out the main repo to another branch which so happens to have a file named f. In this case, the check-out will fail due to the name collision. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-27 21:26 ` Jason Cho @ 2025-09-30 10:30 ` Michal Suchánek 2025-09-30 15:47 ` Junio C Hamano 0 siblings, 1 reply; 43+ messages in thread From: Michal Suchánek @ 2025-09-30 10:30 UTC (permalink / raw) To: Jason Cho; +Cc: Junio C Hamano, Jakub T. Jankiewicz, git On Sat, Sep 27, 2025 at 09:26:54PM +0000, Jason Cho wrote: > I think the best practice is to not add a work tre within the master work tree. And is that best practice documented somewhere? IIRC there are some VCSs for which it is common practice to keep checkouts of multiple branches side by side in the repository directory. IIRC the repository directory itself is not a checkout in this case. Anyway, there is no obvious reason for anyone not familiar with git internals to not do this. > Suppose a repo is at the master branch, and you export a work tree in the directory f. > > Then, you check out the main repo to another branch which so happens to have a file named f. In this case, the check-out will fail due to the name collision. That would not happen in this work style, each branch has a separate checkout. If you want to checkout a branch you create a worktree for it. Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-30 10:30 ` Michal Suchánek @ 2025-09-30 15:47 ` Junio C Hamano 2025-11-19 8:13 ` Michal Suchánek 0 siblings, 1 reply; 43+ messages in thread From: Junio C Hamano @ 2025-09-30 15:47 UTC (permalink / raw) To: Michal Suchánek; +Cc: Jason Cho, Jakub T. Jankiewicz, git Michal Suchánek <msuchanek@suse.de> writes: > On Sat, Sep 27, 2025 at 09:26:54PM +0000, Jason Cho wrote: >> I think the best practice is to not add a work tre within the master work tree. > > And is that best practice documented somewhere? I do not think it is documented anywhere. In fact, I do not think the inventors of the worktree feature ever expected this end-user expectation that checking out multiple worktrees of the repository *INSIDE* a repository's checkout would be any useful without confusing users. IOW, omission of the documentation is by an assumptionk that nobody would imagine doing in any other way. We can and should fix it retroactively, if the lack of documentation is not guiding our users in the right direction. Any takers? > IIRC there are some VCSs for which it is common practice to keep > checkouts of multiple branches side by side in the repository directory. I can understand "side-by-side" but not "in". Next to the primary workree (aka "initial clone") would be more common. > IIRC the repository directory itself is not a checkout in this case. > Anyway, there is no obvious reason for anyone not familiar with git > internals to not do this. Meaning anybody not familiar with the tool would do any random thing outside of the usage pattern that the users of the tool have been establishing over the years? I can certainly understand that. But then, creating a set of worktrees, one per branch, next to the primary worktree that checks out the 'main' branch, would also equally be a likely layout, I would imagine. Thanks. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-30 15:47 ` Junio C Hamano @ 2025-11-19 8:13 ` Michal Suchánek 0 siblings, 0 replies; 43+ messages in thread From: Michal Suchánek @ 2025-11-19 8:13 UTC (permalink / raw) To: Junio C Hamano; +Cc: Jason Cho, Jakub T. Jankiewicz, git On Tue, Sep 30, 2025 at 08:47:11AM -0700, Junio C Hamano wrote: > Michal Suchánek <msuchanek@suse.de> writes: > > > On Sat, Sep 27, 2025 at 09:26:54PM +0000, Jason Cho wrote: > >> I think the best practice is to not add a work tre within the master work tree. > > > > And is that best practice documented somewhere? > > I do not think it is documented anywhere. > > In fact, I do not think the inventors of the worktree feature ever > expected this end-user expectation that checking out multiple > worktrees of the repository *INSIDE* a repository's checkout would > be any useful without confusing users. > > IOW, omission of the documentation is by an assumptionk that nobody > would imagine doing in any other way. > > We can and should fix it retroactively, if the lack of documentation > is not guiding our users in the right direction. Any takers? > > > IIRC there are some VCSs for which it is common practice to keep > > checkouts of multiple branches side by side in the repository directory. > > I can understand "side-by-side" but not "in". Next to the primary > workree (aka "initial clone") would be more common. > > > IIRC the repository directory itself is not a checkout in this case. > > Anyway, there is no obvious reason for anyone not familiar with git > > internals to not do this. > > Meaning anybody not familiar with the tool would do any random thing > outside of the usage pattern that the users of the tool have been > establishing over the years? I can certainly understand that. But > then, creating a set of worktrees, one per branch, next to the > primary worktree that checks out the 'main' branch, would also equally > be a likely layout, I would imagine. And that's what the existing example shows. Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-27 21:08 ` Jason Cho 2025-09-27 21:26 ` Jason Cho @ 2025-09-30 10:37 ` Michal Suchánek 2025-10-01 12:16 ` Ben Knoble 1 sibling, 1 reply; 43+ messages in thread From: Michal Suchánek @ 2025-09-30 10:37 UTC (permalink / raw) To: Jason Cho; +Cc: Junio C Hamano, Jakub T. Jankiewicz, git On Sat, Sep 27, 2025 at 09:08:44PM +0000, Jason Cho wrote: > > It does not not show its own .git directory as untracked files > > > > That can be seen as inconsistent. > > Well, I see your point. Since the .git directory is from a git repo, the directory is ignored by git. Therefore, you want git to also ignore other items derived from the repo, including work trees. > > However, this is a minor improvement and I suspect your proposed feature may have an unknown impact. The impact is that the list of worktrees would have to be read to get status. As status is not particularly cheap operation in any case I would expect the problem to be minor. > Anyway, what's your real use case? Do you really add hundreds of work trees within the same repo directory so that you hate to see them in git status? What is the abstraction you are trying to propose here? Or do you suggest to eschew any intelligible abstraction in favor of (probably minor) implementation convenience? Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-09-30 10:37 ` Michal Suchánek @ 2025-10-01 12:16 ` Ben Knoble 2025-10-01 18:54 ` Junio C Hamano 0 siblings, 1 reply; 43+ messages in thread From: Ben Knoble @ 2025-10-01 12:16 UTC (permalink / raw) To: Michal Suchánek; +Cc: Jason Cho, Junio C Hamano, Jakub T. Jankiewicz, git > Le 30 sept. 2025 à 06:41, Michal Suchánek <msuchanek@suse.de> a écrit : > > On Sat, Sep 27, 2025 at 09:08:44PM +0000, Jason Cho wrote: >>> It does not not show its own .git directory as untracked files >>> >>> That can be seen as inconsistent. >> >> Well, I see your point. Since the .git directory is from a git repo, the directory is ignored by git. Therefore, you want git to also ignore other items derived from the repo, including work trees. >> >> However, this is a minor improvement and I suspect your proposed feature may have an unknown impact. > > The impact is that the list of worktrees would have to be read to get > status. As status is not particularly cheap operation in any case I > would expect the problem to be minor. I believe status information is used for the shell prompt info, so performance hits there have a cost. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 12:16 ` Ben Knoble @ 2025-10-01 18:54 ` Junio C Hamano 2025-10-01 20:22 ` Sergey Organov 2025-10-02 2:33 ` Ben Knoble 0 siblings, 2 replies; 43+ messages in thread From: Junio C Hamano @ 2025-10-01 18:54 UTC (permalink / raw) To: Ben Knoble; +Cc: Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git Ben Knoble <ben.knoble@gmail.com> writes: >> The impact is that the list of worktrees would have to be read to get >> status. As status is not particularly cheap operation in any case I >> would expect the problem to be minor. > > I believe status information is used for the shell prompt info, so > performance hits there have a cost. Sure, but an embedded git-controlled working tree _should_ be flagged as an untracked entity, _unless_ it is ignore'd, no? That is how you would add a new submodule to your project after all. So, if you want to ignore them, just add them to .git/info/exclude or something, perhaps? Why do people even want to have such a layout, unless they want to make it a submodule (or deliberate subdirectory that is unrelated)? -+- README.md (your own branch, probably on main) | +-+ worktree-foo (worktree checkout of branch foo) | | | +-- README.md (a slight variant of the file in foo) | +-+ worktree-bar (worktree checkout of branch bar) | | | +-- README.md (a slight variant of the file in bar) | +-+ worktree-baz (worktree checkout of branch baz) | | | +-- README.md (a slight variant of the file in baz) Wouldn't it be easier to manage if you had this instead? -+ | +-+ my-project (the primary worktree, probably on main) | | | +-- README.md (the file from branch main) | +-+ worktree-foo (worktree checkout of branch foo) | | | +-- README.md (a slight variant of the file in foo) | +-+ worktree-bar (worktree checkout of branch bar) | | | +-- README.md (a slight variant of the file in bar) | +-+ worktree-baz (worktree checkout of branch baz) | | | +-- README.md (a slight variant of the file in baz) That way, you can go up to the umbrella directory and ... $ cd .. $ ls my-project worktree-foo worktree-bar worktree-baz $ grep -e HowTo */README.md ... do things you would do collectively to these worktrees with the primary worktree included as well. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 18:54 ` Junio C Hamano @ 2025-10-01 20:22 ` Sergey Organov 2025-10-01 20:48 ` Junio C Hamano 2025-10-02 2:33 ` Ben Knoble 1 sibling, 1 reply; 43+ messages in thread From: Sergey Organov @ 2025-10-01 20:22 UTC (permalink / raw) To: Junio C Hamano Cc: Ben Knoble, Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git Junio C Hamano <gitster@pobox.com> writes: > Ben Knoble <ben.knoble@gmail.com> writes: > >>> The impact is that the list of worktrees would have to be read to get >>> status. As status is not particularly cheap operation in any case I >>> would expect the problem to be minor. >> >> I believe status information is used for the shell prompt info, so >> performance hits there have a cost. > > Sure, but an embedded git-controlled working tree _should_ be > flagged as an untracked entity, _unless_ it is ignore'd, no? > > That is how you would add a new submodule to your project after all. > So, if you want to ignore them, just add them to .git/info/exclude > or something, perhaps? > > Why do people even want to have such a layout, unless they want to > make it a submodule (or deliberate subdirectory that is unrelated)? > > -+- README.md (your own branch, probably on main) > | > +-+ worktree-foo (worktree checkout of branch foo) > | | > | +-- README.md (a slight variant of the file in foo) > | > +-+ worktree-bar (worktree checkout of branch bar) > | | > | +-- README.md (a slight variant of the file in bar) > | > +-+ worktree-baz (worktree checkout of branch baz) > | | > | +-- README.md (a slight variant of the file in baz) > > Wouldn't it be easier to manage if you had this instead? > > -+ > | > +-+ my-project (the primary worktree, probably on main) > | | > | +-- README.md (the file from branch main) > | > +-+ worktree-foo (worktree checkout of branch foo) > | | > | +-- README.md (a slight variant of the file in foo) > | > +-+ worktree-bar (worktree checkout of branch bar) > | | > | +-- README.md (a slight variant of the file in bar) > | > +-+ worktree-baz (worktree checkout of branch baz) > | | > | +-- README.md (a slight variant of the file in baz) > > That way, you can go up to the umbrella directory and ... > > $ cd .. > $ ls > my-project worktree-foo worktree-bar worktree-baz > $ grep -e HowTo */README.md > > ... do things you would do collectively to these worktrees with the > primary worktree included as well. I suspect people rather expect support for repository with multiple equal worktrees (no "primary" one), like this: myproject / .git / worktree-foo / worktree-bar 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. -- Sergey Organov ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 20:22 ` Sergey Organov @ 2025-10-01 20:48 ` Junio C Hamano 2025-10-01 21:27 ` Jakub T. Jankiewicz 2025-10-01 21:29 ` Eric Sunshine 0 siblings, 2 replies; 43+ messages in thread From: Junio C Hamano @ 2025-10-01 20:48 UTC (permalink / raw) To: Sergey Organov Cc: Ben Knoble, Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git 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? Thanks. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 20:48 ` Junio C Hamano @ 2025-10-01 21:27 ` Jakub T. Jankiewicz 2025-10-01 22:07 ` Junio C Hamano 2025-10-01 21:29 ` Eric Sunshine 1 sibling, 1 reply; 43+ messages in thread From: Jakub T. Jankiewicz @ 2025-10-01 21:27 UTC (permalink / raw) To: Junio C Hamano Cc: Sergey Organov, Ben Knoble, Michal Suchánek, Jason Cho, git On Wed, 01 Oct 2025 13:48:54 -0700 Junio C Hamano <gitster@pobox.com> wrote: > 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? I discovered work trees recently, even that they are supported for years. And I though that the only way you use them is: git worktree add branch It just didn't occur to me, that you suppose to have them out outside the root directory. The way I think about git is: directory/ .git and all the stuff that belong that repo You don't create submodules outside of your root directory. Didn't you? -- Jakub T. Jankiewicz, Senior Front-End Developer https://jakub.jankiewicz.org https://lips.js.org https://koduj.org ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 21:27 ` Jakub T. Jankiewicz @ 2025-10-01 22:07 ` Junio C Hamano 0 siblings, 0 replies; 43+ messages in thread From: Junio C Hamano @ 2025-10-01 22:07 UTC (permalink / raw) To: Jakub T. Jankiewicz Cc: Sergey Organov, Ben Knoble, Michal Suchánek, Jason Cho, git "Jakub T. Jankiewicz" <jcubic@jcubic.pl> writes: > It just didn't occur to me, that you suppose to have them out outside the > root directory. The way I think about git is: > > directory/ > .git > and all the stuff that belong that repo But the point of additional worktrees is to have the stuff additionally appear outside your normal working area, so that you can continue working inside your primary checkout without getting affected by those extra directories. When you _do_ want to have them _outside_ your primary working tree, you use them. That is the whole point of having additional worktrees that lets you make the contents of other branches materialize on the filesystem. > You don't create submodules outside of your root directory. Didn't you? Sorry, but I do not get that question. Submodule is attached to your superproject as part of it. A worktree is an additional and separate instantiation of the project itself, which is quite a different thing. They are apples and oranges, as far as I can see. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 20:48 ` Junio C Hamano 2025-10-01 21:27 ` Jakub T. Jankiewicz @ 2025-10-01 21:29 ` Eric Sunshine 2025-10-01 22:27 ` Junio C Hamano 2025-11-17 22:36 ` What is the reason behind not hiding git worktrees from git? Johannes Schindelin 1 sibling, 2 replies; 43+ messages in thread From: Eric Sunshine @ 2025-10-01 21:29 UTC (permalink / raw) To: Junio C Hamano Cc: Sergey Organov, Ben Knoble, Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git On Wed, Oct 1, 2025 at 4:49 PM Junio C Hamano <gitster@pobox.com> wrote: > 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. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 21:29 ` Eric Sunshine @ 2025-10-01 22:27 ` Junio C Hamano 2025-10-02 8:38 ` Michal Suchánek 2025-11-17 22:36 ` What is the reason behind not hiding git worktrees from git? Johannes Schindelin 1 sibling, 1 reply; 43+ messages in thread From: Junio C Hamano @ 2025-10-01 22:27 UTC (permalink / raw) To: Eric Sunshine Cc: Sergey Organov, Ben Knoble, Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git Eric Sunshine <sunshine@sunshineco.com> writes: > 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. Ah, different people guess different reasons out of the same observation. My interpretation of this is the first time about the complaint on "noise" was because everybody else would not even have additional worktree in-tree. > 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. Oh, that is an obvious thing to do, too, to attach "additional" worktrees to a bare repository (which does not have the primary worktree). I do not think anybody sane would add these worktrees in-tree if the repository is bare, though. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 22:27 ` Junio C Hamano @ 2025-10-02 8:38 ` Michal Suchánek 2025-10-02 13:33 ` Junio C Hamano 0 siblings, 1 reply; 43+ messages in thread From: Michal Suchánek @ 2025-10-02 8:38 UTC (permalink / raw) To: Junio C Hamano Cc: Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz, git On Wed, Oct 01, 2025 at 03:27:03PM -0700, Junio C Hamano wrote: > Eric Sunshine <sunshine@sunshineco.com> writes: > > > 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. > > Ah, different people guess different reasons out of the same > observation. My interpretation of this is the first time about the > complaint on "noise" was because everybody else would not even have > additional worktree in-tree. I suppose a suggestion about not adding worktree in-tree in the add command description would be helpful to avoid the problem. That's the part I would read if I wanted to learn about adding worktrees, and it has none of those examples you mention. > > 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. > > Oh, that is an obvious thing to do, too, to attach "additional" > worktrees to a bare repository (which does not have the primary > worktree). I do not think anybody sane would add these worktrees > in-tree if the repository is bare, though. That's exactly the part that is obvious only to people familiar with git internals, not people reading the documentation. And it's what is needed to create the side-by-side layout for people that want to use that. Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-02 8:38 ` Michal Suchánek @ 2025-10-02 13:33 ` Junio C Hamano 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek 2025-10-02 15:51 ` [PATCH " Michal Suchanek 0 siblings, 2 replies; 43+ messages in thread From: Junio C Hamano @ 2025-10-02 13:33 UTC (permalink / raw) To: Michal Suchánek Cc: Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz, git Michal Suchánek <msuchanek@suse.de> writes: > On Wed, Oct 01, 2025 at 03:27:03PM -0700, Junio C Hamano wrote: >> Eric Sunshine <sunshine@sunshineco.com> writes: >> >> > 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. >> >> Ah, different people guess different reasons out of the same >> observation. My interpretation of this is the first time about the >> complaint on "noise" was because everybody else would not even have >> additional worktree in-tree. > > I suppose a suggestion about not adding worktree in-tree in the add > command description would be helpful to avoid the problem. > > That's the part I would read if I wanted to learn about adding > worktrees, and it has none of those examples you mention. Yeah, care to throw a patch or two at the documentation to help our users and us? Thanks. ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH 1/2] doc: git-worktree: Link to examples 2025-10-02 13:33 ` Junio C Hamano @ 2025-10-02 15:51 ` Michal Suchanek 2025-10-02 17:42 ` Kristoffer Haugsbakk ` (4 more replies) 2025-10-02 15:51 ` [PATCH " Michal Suchanek 1 sibling, 5 replies; 43+ messages in thread From: Michal Suchanek @ 2025-10-02 15:51 UTC (permalink / raw) To: git Cc: Michal Suchanek, Junio C Hamano, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Also add advice to put new worktrees outside of existing ones. Signed-off-by: Michal Suchanek <msuchanek@suse.de> --- Documentation/git-worktree.adoc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc index 389e669ac0..ec31863aec 100644 --- a/Documentation/git-worktree.adoc +++ b/Documentation/git-worktree.adoc @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: $ git worktree add --track -b <branch> <path> <remote>/<branch> ------------ + +For best results it is advised to specify <path> outside of the repository and +existing worktrees - see <<EXAMPLES>> ++ If the branch exists in multiple remotes and one of them is named by the `checkout.defaultRemote` configuration variable, we'll use that one for the purposes of disambiguation, even if the `<branch>` isn't @@ -502,8 +505,8 @@ locked "reason\nwhy is locked" ... ------------ -EXAMPLES --------- +[[EXAMPLES]]EXAMPLES +-------------------- You are in the middle of a refactoring session and your boss comes in and demands that you fix something immediately. You might typically use linkgit:git-stash[1] to store your changes away temporarily, however, your -- 2.51.0 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH 1/2] doc: git-worktree: Link to examples 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek @ 2025-10-02 17:42 ` Kristoffer Haugsbakk 2025-10-02 17:44 ` Junio C Hamano ` (3 subsequent siblings) 4 siblings, 0 replies; 43+ messages in thread From: Kristoffer Haugsbakk @ 2025-10-02 17:42 UTC (permalink / raw) To: Michal Suchanek, git Cc: Junio C Hamano, Eric Sunshine, Sergey Organov, D. Ben Knoble, Jason Cho, Jakub T. Jankiewicz > doc: git-worktree: Link to examples The initial word after the colon should be lowercase unless it’s a proper noun. On Thu, Oct 2, 2025, at 17:51, Michal Suchanek wrote: > Also add advice to put new worktrees outside of existing ones. > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > --- > Documentation/git-worktree.adoc | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > index 389e669ac0..ec31863aec 100644 > --- a/Documentation/git-worktree.adoc > +++ b/Documentation/git-worktree.adoc > @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: > $ git worktree add --track -b <branch> <path> <remote>/<branch> > ------------ > + > +For best results it is advised to specify <path> outside of the repository and > +existing worktrees - see <<EXAMPLES>> This is definitely an improvement. The current doc forces you to infer that you shouldn’t put worktrees inside the repository... or just think too much. It might also be nice to have a clause which hints at why? Maybe just one or a few reasons, e.g. that you would have gitignore the worktree directory. > +existing worktrees - see <<EXAMPLES>> I was about to recommend a `--` for en-dash but now I see that that produces an em-dash instead.. :) > > ++ > If the branch exists in multiple remotes and one of them is named by > the `checkout.defaultRemote` configuration variable, we'll use that > one for the purposes of disambiguation, even if the `<branch>` isn't > @@ -502,8 +505,8 @@ locked "reason\nwhy is locked" > ... > ------------ > > -EXAMPLES > --------- > +[[EXAMPLES]]EXAMPLES > +-------------------- Apparently an anchor on the same line should not be used. https://lore.kernel.org/git/5044672.31r3eYUQgx@cayenne/#:~:text=Please%20do%20not%20put%20anchors > You are in the middle of a refactoring session and your boss comes in and > demands that you fix something immediately. You might typically use > linkgit:git-stash[1] to store your changes away temporarily, however, your > -- > 2.51.0 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 1/2] doc: git-worktree: Link to examples 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek 2025-10-02 17:42 ` Kristoffer Haugsbakk @ 2025-10-02 17:44 ` Junio C Hamano 2025-10-02 18:55 ` Michal Suchánek 2025-10-05 20:52 ` Jean-Noël AVILA ` (2 subsequent siblings) 4 siblings, 1 reply; 43+ messages in thread From: Junio C Hamano @ 2025-10-02 17:44 UTC (permalink / raw) To: Michal Suchanek Cc: git, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Michal Suchanek <msuchanek@suse.de> writes: > Also add advice to put new worktrees outside of existing ones. > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > --- > Documentation/git-worktree.adoc | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > index 389e669ac0..ec31863aec 100644 > --- a/Documentation/git-worktree.adoc > +++ b/Documentation/git-worktree.adoc > @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: > $ git worktree add --track -b <branch> <path> <remote>/<branch> > ------------ > + > +For best results it is advised to specify <path> outside of the repository and > +existing worktrees - see <<EXAMPLES>> > ++ I am wondering if we cram more information in "For best results", by adding the "otherwise...". Here is my (failed) attempt. Use <path> outside of your working tree and existing worktrees (see <<EXAMPLES>>); otherwise your new worktree will appear as an untracked directory. I say "failed" as the above phrasing makes it sound as if that untracked-ness is the only downside, and also by omitting "advised", it makes it sound as if there is no upside (other than inertia) in doing so. So, I'll (atleast tentatively) queue yours as-is. > If the branch exists in multiple remotes and one of them is named by > the `checkout.defaultRemote` configuration variable, we'll use that > one for the purposes of disambiguation, even if the `<branch>` isn't > @@ -502,8 +505,8 @@ locked "reason\nwhy is locked" > ... > ------------ > > -EXAMPLES > --------- > +[[EXAMPLES]]EXAMPLES > +-------------------- cf. https://lore.kernel.org/git/5044672.31r3eYUQgx@cayenne/ IOW, we probably should write this more like ... +[[EXAMPLES]] EXAMPLES -------- Thanks. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 1/2] doc: git-worktree: Link to examples 2025-10-02 17:44 ` Junio C Hamano @ 2025-10-02 18:55 ` Michal Suchánek 0 siblings, 0 replies; 43+ messages in thread From: Michal Suchánek @ 2025-10-02 18:55 UTC (permalink / raw) To: Junio C Hamano Cc: git, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Thu, Oct 02, 2025 at 10:44:06AM -0700, Junio C Hamano wrote: > Michal Suchanek <msuchanek@suse.de> writes: > > > Also add advice to put new worktrees outside of existing ones. > > > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > > --- > > Documentation/git-worktree.adoc | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > > index 389e669ac0..ec31863aec 100644 > > --- a/Documentation/git-worktree.adoc > > +++ b/Documentation/git-worktree.adoc > > @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: > > $ git worktree add --track -b <branch> <path> <remote>/<branch> > > ------------ > > + > > +For best results it is advised to specify <path> outside of the repository and > > +existing worktrees - see <<EXAMPLES>> > > ++ > > I am wondering if we cram more information in "For best results", by > adding the "otherwise...". Here is my (failed) attempt. > > Use <path> outside of your working tree and existing worktrees > (see <<EXAMPLES>>); otherwise your new worktree will appear as > an untracked directory. > > I say "failed" as the above phrasing makes it sound as if that > untracked-ness is the only downside, and also by omitting "advised", > it makes it sound as if there is no upside (other than inertia) in > doing so. > > So, I'll (atleast tentatively) queue yours as-is. Yes, I did not want to make this explanation too long. Spelling out all the details would take multiple paragraphs but it's probably not worth being that verbose. > > If the branch exists in multiple remotes and one of them is named by > > the `checkout.defaultRemote` configuration variable, we'll use that > > one for the purposes of disambiguation, even if the `<branch>` isn't > > @@ -502,8 +505,8 @@ locked "reason\nwhy is locked" > > ... > > ------------ > > > > -EXAMPLES > > --------- > > +[[EXAMPLES]]EXAMPLES > > +-------------------- > > cf. https://lore.kernel.org/git/5044672.31r3eYUQgx@cayenne/ > > IOW, we probably should write this more like ... > > +[[EXAMPLES]] > EXAMPLES > -------- That could use correcting in the the asciidoc documentation. The examples there put the anchor on the same line. That's probably where the repeated problem of this formatting is coming from. The other thing is that if you used sections you would get anchors automatically for free avoiding this problem altogether. Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 1/2] doc: git-worktree: Link to examples 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek 2025-10-02 17:42 ` Kristoffer Haugsbakk 2025-10-02 17:44 ` Junio C Hamano @ 2025-10-05 20:52 ` Jean-Noël AVILA 2025-10-10 17:10 ` Michal Suchánek 2025-10-10 17:04 ` [PATCH v2 " Michal Suchanek 2025-10-10 17:04 ` [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example Michal Suchanek 4 siblings, 1 reply; 43+ messages in thread From: Jean-Noël AVILA @ 2025-10-05 20:52 UTC (permalink / raw) To: git, Michal Suchanek Cc: Michal Suchanek, Junio C Hamano, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Thursday, 2 October 2025 17:51:34 CEST Michal Suchanek wrote: > Also add advice to put new worktrees outside of existing ones. > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > --- > Documentation/git-worktree.adoc | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git- worktree.adoc > index 389e669ac0..ec31863aec 100644 > --- a/Documentation/git-worktree.adoc > +++ b/Documentation/git-worktree.adoc > @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: > $ git worktree add --track -b <branch> <path> <remote>/<branch> > ------------ > + > +For best results it is advised to specify <path> outside of the repository and > +existing worktrees - see <<EXAMPLES>> Please use the form <<EXAMPLES,EXAMPLES>> in order to let the translators also change the cross-link text in their language. Also, the <path> placeholder should be formatted as _<path>_. For your information, I'm right in the middle of pushing the conversion of git- worktree.adoc to the new synopsis style. > ++ > If the branch exists in multiple remotes and one of them is named by > the `checkout.defaultRemote` configuration variable, we'll use that > one for the purposes of disambiguation, even if the `<branch>` isn't > @@ -502,8 +505,8 @@ locked "reason\nwhy is locked" > ... > ------------ > > -EXAMPLES > --------- > +[[EXAMPLES]]EXAMPLES > +-------------------- As noted by others, please put the block anchors on a dedicated line, out of the translation scope. Thank you. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 1/2] doc: git-worktree: Link to examples 2025-10-05 20:52 ` Jean-Noël AVILA @ 2025-10-10 17:10 ` Michal Suchánek 0 siblings, 0 replies; 43+ messages in thread From: Michal Suchánek @ 2025-10-10 17:10 UTC (permalink / raw) To: Jean-Noël AVILA Cc: git, Junio C Hamano, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Hello, On Sun, Oct 05, 2025 at 10:52:51PM +0200, Jean-Noël AVILA wrote: > On Thursday, 2 October 2025 17:51:34 CEST Michal Suchanek wrote: > > Also add advice to put new worktrees outside of existing ones. > > > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > > --- > > Documentation/git-worktree.adoc | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git- > worktree.adoc > > index 389e669ac0..ec31863aec 100644 > > --- a/Documentation/git-worktree.adoc > > +++ b/Documentation/git-worktree.adoc > > @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: > > $ git worktree add --track -b <branch> <path> <remote>/<branch> > > ------------ > > + > > +For best results it is advised to specify <path> outside of the repository > and > > +existing worktrees - see <<EXAMPLES>> > > Please use the form <<EXAMPLES,EXAMPLES>> in order to let the translators also > change the cross-link text in their language. > > Also, the <path> placeholder should be formatted as _<path>_. For your > information, I'm right in the middle of pushing the conversion of git- > worktree.adoc to the new synopsis style. Seems it would not conflict too badly, at least if your series is applied first. Thanks Michal > > > ++ > > If the branch exists in multiple remotes and one of them is named by > > the `checkout.defaultRemote` configuration variable, we'll use that > > one for the purposes of disambiguation, even if the `<branch>` isn't > > @@ -502,8 +505,8 @@ locked "reason\nwhy is locked" > > ... > > ------------ > > > > -EXAMPLES > > --------- > > +[[EXAMPLES]]EXAMPLES > > +-------------------- > > As noted by others, please put the block anchors on a dedicated line, out of > the translation scope. > > Thank you. > > ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH v2 1/2] doc: git-worktree: Link to examples 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek ` (2 preceding siblings ...) 2025-10-05 20:52 ` Jean-Noël AVILA @ 2025-10-10 17:04 ` Michal Suchanek 2025-10-11 4:40 ` Eric Sunshine 2025-10-10 17:04 ` [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example Michal Suchanek 4 siblings, 1 reply; 43+ messages in thread From: Michal Suchanek @ 2025-10-10 17:04 UTC (permalink / raw) To: git Cc: Michal Suchanek, Jean-Noël AVILA, Junio C Hamano, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Also add advice to put new worktrees outside of existing ones. Signed-off-by: Michal Suchanek <msuchanek@suse.de> --- v2: Improve formatting --- Documentation/git-worktree.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc index 389e669ac0..a580f4c072 100644 --- a/Documentation/git-worktree.adoc +++ b/Documentation/git-worktree.adoc @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: $ git worktree add --track -b <branch> <path> <remote>/<branch> ------------ + +For best results it is advised to specify _<path>_ outside of the repository +and existing worktrees - see <<EXAMPLES,EXAMPLES>> ++ If the branch exists in multiple remotes and one of them is named by the `checkout.defaultRemote` configuration variable, we'll use that one for the purposes of disambiguation, even if the `<branch>` isn't @@ -502,6 +505,7 @@ locked "reason\nwhy is locked" ... ------------ +[[EXAMPLES]] EXAMPLES -------- You are in the middle of a refactoring session and your boss comes in and -- 2.51.0 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH v2 1/2] doc: git-worktree: Link to examples 2025-10-10 17:04 ` [PATCH v2 " Michal Suchanek @ 2025-10-11 4:40 ` Eric Sunshine 0 siblings, 0 replies; 43+ messages in thread From: Eric Sunshine @ 2025-10-11 4:40 UTC (permalink / raw) To: Michal Suchanek Cc: git, Jean-Noël AVILA, Junio C Hamano, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Fri, Oct 10, 2025 at 1:05 PM Michal Suchanek <msuchanek@suse.de> wrote: > doc: git-worktree: Link to examples > > Also add advice to put new worktrees outside of existing ones. The subject and body of the commit message are backward. The really important change made by this patch is that it is adding a new recommendation; linking to the examples is just a handy byproduct of that change. Hence, the subject of the patch should mention the new recommendation, not the link to the examples. In fact, if you frame it that way, then the commit message doesn't even need to talk about the link to examples. Also, a reviewer of v1 mentioned that the subject should use lowercase "link" rather than "Link". > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > --- > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > @@ -79,6 +79,9 @@ with a matching name, treat as equivalent to: > +For best results it is advised to specify _<path>_ outside of the repository > +and existing worktrees - see <<EXAMPLES,EXAMPLES>> I'm quite negative toward this documentation change for the same reason[*] that I was very much against adding a warning message (reproduced here): 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. The big problem I have with this change is that the newly-added advice is not backed up by concrete reasoning -- worse, it gives *no* reasons at all -- thus it leaves the reader hanging. As mentioned above, there is no technical reason to avoid creating new worktrees in the main worktree, which means that whatever reasons you might have for recommending against the practice must be subjective, but the reader has no way of guessing what those reasons might be. I *might* be a little less negative toward this documentation change if you presented the new recommendation accompanied by a list of pros and cons which, although subjective, are nevertheless somehow convincing to the reader. However, aside from the very minor aesthetic inconvenience of seeing a linked worktree shown as untracked, I personally can't come up with any list of pros and cons. Unless you or someone else can do better, I think this patch should be dropped altogether. [*]: https://lore.kernel.org/git/CAPig+cQgZijWi8VV1_QScKPhm9cqhQVvow4N-VH00R4oO1m2xA@mail.gmail.com/ ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek ` (3 preceding siblings ...) 2025-10-10 17:04 ` [PATCH v2 " Michal Suchanek @ 2025-10-10 17:04 ` Michal Suchanek 2025-10-11 5:17 ` Eric Sunshine 4 siblings, 1 reply; 43+ messages in thread From: Michal Suchanek @ 2025-10-10 17:04 UTC (permalink / raw) To: git Cc: Michal Suchanek, Jean-Noël AVILA, Junio C Hamano, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Signed-off-by: Michal Suchanek <msuchanek@suse.de> --- v2: Do not make the checked out repository hidden --- Documentation/git-worktree.adoc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc index a580f4c072..e7bf0ea8e0 100644 --- a/Documentation/git-worktree.adoc +++ b/Documentation/git-worktree.adoc @@ -526,6 +526,16 @@ $ popd $ git worktree remove ../temp ------------ +Side by side branch checkouts for a repository using multiple worktrees + +------------ +mkdir some-repository +cd some-repository +git clone --bare gitforge@someforge.example.com:some-org/some-repository some-repository.git +git --git-dir=some-repository.git worktree add some-branch +git --git-dir=some-repository.git worktree add another-branch +------------ + BUGS ---- Multiple checkout in general is still experimental, and the support -- 2.51.0 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-10 17:04 ` [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example Michal Suchanek @ 2025-10-11 5:17 ` Eric Sunshine 2025-10-23 19:40 ` Junio C Hamano 2025-10-24 10:15 ` Michal Suchánek 0 siblings, 2 replies; 43+ messages in thread From: Eric Sunshine @ 2025-10-11 5:17 UTC (permalink / raw) To: Michal Suchanek Cc: git, Jean-Noël AVILA, Junio C Hamano, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Fri, Oct 10, 2025 at 1:05 PM Michal Suchanek <msuchanek@suse.de> wrote: > doc: git-worktree: Add side by side branch checkout example Thanks for taking my suggestion[*] regarding a possible git-worktree documentation update and turning it into an actual patch. This is a reasonable beginning, but I think it needs more work. To begin, the idea was to document that worktrees can be used with bare repositories, but neither the subject of this patch nor the prose added to the documentation itself mentions bare worktrees. Instead, they mention only "side by side branch checkouts", but I'm not even sure what that means. I certainly wouldn't think of "bare repository" when given the phrase "side by side branch checkouts", and I'm pretty sure that phrase is not part of the existing Git lexicon, whereas "bare repository" is, and is well known and well understood. So, I think both the commit message and the prose added to the documentation ought to mention "bare repository" instead. Next, I think it is quite important that we spell out concretely in prose that worktrees can be used with a bare repository. It is not sufficient to merely infer it by giving an example, especially if the reader is primarily reading the git-worktree.txt introductory material which explains what worktrees are all about. So, for instance, we could expand the "The new worktree is called..." introductory paragraph to instead say something like this: This new worktree is called a "linked worktree" as opposed to the "main worktree" prepared by git-init(1) or git-clone(1). A repository has one main worktree (if it’s not a bare repository) and zero or more linked worktrees. Linked worktrees can also be used with a bare repository, in which case there is no main worktree but *only* linked worktrees (see EXAMPLES). and also move the "When you are done with..." sentence from that paragraph down to the "If a working tree is deleted..." paragraph, which would become: When you are done with a linked worktree, remove it with `git worktree remove`. If a working tree is deleted without using `git worktree remove`, then its associated administrative files, which reside in the repository (see "DETAILS" below)... > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > --- > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > @@ -526,6 +526,16 @@ $ popd > $ git worktree remove ../temp > ------------ > > +Side by side branch checkouts for a repository using multiple worktrees > + > +------------ > +mkdir some-repository > +cd some-repository > +git clone --bare gitforge@someforge.example.com:some-org/some-repository some-repository.git > +git --git-dir=some-repository.git worktree add some-branch > +git --git-dir=some-repository.git worktree add another-branch > +------------ Several comments... First, as mentioned above, rather than using the phrasing "side by side branch checkouts", let's talk about this as being an example of using worktrees with a bare repository. Second, for consistency, let's follow the lead of the existing example in git-worktree.txt and show the "$" shell prompt preceding the commands. For instance: $ mkdir ... $ git clone ... Third, the example seems overly complicated, especially with its use of `--git-dir`, which feels less discoverable (at least to me) than, say `-C`. What I have in mind is an example more like this: $ git clone --bare <repository-url> myproj.git $ git -C myproj.git worktree add feature-a $ git -C myproj.git worktree add feature-b That should be more than sufficient to get people up and running with associating worktrees to a bare repository. [*] https://lore.kernel.org/git/CAPig+cQgZijWi8VV1_QScKPhm9cqhQVvow4N-VH00R4oO1m2xA@mail.gmail.com/ ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-11 5:17 ` Eric Sunshine @ 2025-10-23 19:40 ` Junio C Hamano 2025-10-24 10:15 ` Michal Suchánek 1 sibling, 0 replies; 43+ messages in thread From: Junio C Hamano @ 2025-10-23 19:40 UTC (permalink / raw) To: Michal Suchanek, Eric Sunshine Cc: git, Jean-Noël AVILA, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Eric Sunshine <sunshine@sunshineco.com> writes: > On Fri, Oct 10, 2025 at 1:05 PM Michal Suchanek <msuchanek@suse.de> wrote: >> doc: git-worktree: Add side by side branch checkout example > > Thanks for taking my suggestion[*] regarding a possible git-worktree > documentation update and turning it into an actual patch. This is a > reasonable beginning, but I think it needs more work. > > To begin, the idea was to document that worktrees can be used with > bare repositories, but neither the subject of this patch nor the prose > added to the documentation itself mentions bare worktrees. Instead, > they mention only "side by side branch checkouts", but I'm not even > sure what that means. This message by Eric was with many good points, including the above. Should I be expecting an update of these patches, hopefully bringing them closer to the finish line? I'll tentatively mark the topic in my "What's cooking" draft as expecting a reroll. Thanks. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-11 5:17 ` Eric Sunshine 2025-10-23 19:40 ` Junio C Hamano @ 2025-10-24 10:15 ` Michal Suchánek 2025-10-24 16:57 ` Eric Sunshine 1 sibling, 1 reply; 43+ messages in thread From: Michal Suchánek @ 2025-10-24 10:15 UTC (permalink / raw) To: Eric Sunshine Cc: git, Jean-Noël AVILA, Junio C Hamano, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Sat, Oct 11, 2025 at 01:17:47AM -0400, Eric Sunshine wrote: > On Fri, Oct 10, 2025 at 1:05 PM Michal Suchanek <msuchanek@suse.de> wrote: > > doc: git-worktree: Add side by side branch checkout example > > Thanks for taking my suggestion[*] regarding a possible git-worktree > documentation update and turning it into an actual patch. This is a > reasonable beginning, but I think it needs more work. > > To begin, the idea was to document that worktrees can be used with > bare repositories, but neither the subject of this patch nor the prose > added to the documentation itself mentions bare worktrees. Instead, So it's not documented to start with. I did not read the whole text, only focused on the problem with adding worktrees in problematic places. That sounds like more general update of the file is needed, also for the prevoius patch. > they mention only "side by side branch checkouts", but I'm not even > sure what that means. I certainly wouldn't think of "bare repository" > when given the phrase "side by side branch checkouts", and I'm pretty > sure that phrase is not part of the existing Git lexicon, whereas > "bare repository" is, and is well known and well understood. So, I > think both the commit message and the prose added to the documentation > ought to mention "bare repository" instead. > > Next, I think it is quite important that we spell out concretely in > prose that worktrees can be used with a bare repository. It is not > sufficient to merely infer it by giving an example, especially if the > reader is primarily reading the git-worktree.txt introductory material > which explains what worktrees are all about. So, for instance, we > could expand the "The new worktree is called..." introductory > paragraph to instead say something like this: > > This new worktree is called a "linked worktree" as opposed to the > "main worktree" prepared by git-init(1) or git-clone(1). A > repository has one main worktree (if it’s not a bare repository) > and zero or more linked worktrees. Linked worktrees can also be > used with a bare repository, in which case there is no main > worktree but *only* linked worktrees (see EXAMPLES). > > and also move the "When you are done with..." sentence from that > paragraph down to the "If a working tree is deleted..." paragraph, > which would become: > > When you are done with a linked worktree, remove it with `git > worktree remove`. If a working tree is deleted without using `git > worktree remove`, then its associated administrative files, which > reside in the repository (see "DETAILS" below)... > > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > > --- > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > > @@ -526,6 +526,16 @@ $ popd > > $ git worktree remove ../temp > > ------------ > > > > +Side by side branch checkouts for a repository using multiple worktrees > > + > > +------------ > > +mkdir some-repository > > +cd some-repository > > +git clone --bare gitforge@someforge.example.com:some-org/some-repository some-repository.git > > +git --git-dir=some-repository.git worktree add some-branch > > +git --git-dir=some-repository.git worktree add another-branch > > +------------ > > Several comments... > > First, as mentioned above, rather than using the phrasing "side by > side branch checkouts", let's talk about this as being an example of > using worktrees with a bare repository. > > Second, for consistency, let's follow the lead of the existing example > in git-worktree.txt and show the "$" shell prompt preceding the > commands. For instance: > > $ mkdir ... > $ git clone ... > > Third, the example seems overly complicated, especially with its use > of `--git-dir`, which feels less discoverable (at least to me) than, > say `-C`. What I have in mind is an example more like this: > > $ git clone --bare <repository-url> myproj.git > $ git -C myproj.git worktree add feature-a > $ git -C myproj.git worktree add feature-b > > That should be more than sufficient to get people up and running with > associating worktrees to a bare repository. That creates a mess. First part is not creating the directory to contain the worktrees related to the repository. Second is creating the worktrees inside the bare repository, contrary to any reasonabe usage advice. Thanks Michal > > [*] https://lore.kernel.org/git/CAPig+cQgZijWi8VV1_QScKPhm9cqhQVvow4N-VH00R4oO1m2xA@mail.gmail.com/ ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-24 10:15 ` Michal Suchánek @ 2025-10-24 16:57 ` Eric Sunshine 2025-11-18 12:01 ` Michal Suchánek 0 siblings, 1 reply; 43+ messages in thread From: Eric Sunshine @ 2025-10-24 16:57 UTC (permalink / raw) To: Michal Suchánek Cc: git, Jean-Noël AVILA, Junio C Hamano, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Fri, Oct 24, 2025 at 6:15 AM Michal Suchánek <msuchanek@suse.de> wrote: > On Sat, Oct 11, 2025 at 01:17:47AM -0400, Eric Sunshine wrote: > > Third, the example seems overly complicated, especially with its use > > of `--git-dir`, which feels less discoverable (at least to me) than, > > say `-C`. What I have in mind is an example more like this: > > > > $ git clone --bare <repository-url> myproj.git > > $ git -C myproj.git worktree add feature-a > > $ git -C myproj.git worktree add feature-b > > > > That should be more than sufficient to get people up and running with > > associating worktrees to a bare repository. > > That creates a mess. First part is not creating the directory to contain > the worktrees related to the repository. Second is creating the > worktrees inside the bare repository, contrary to any reasonabe usage > advice. Sorry, I mistyped that. What I meant was: $ git -C myproj.git worktree add ../feature-a which makes the worktrees siblings of the bare repository. As for first creating a directory to contain the repository and the worktrees, I purposely omitted that step in the example since I assume/hope that we don't need to hand-hold the user to that extent. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-24 16:57 ` Eric Sunshine @ 2025-11-18 12:01 ` Michal Suchánek 2025-11-19 7:19 ` Eric Sunshine 0 siblings, 1 reply; 43+ messages in thread From: Michal Suchánek @ 2025-11-18 12:01 UTC (permalink / raw) To: Eric Sunshine Cc: git, Jean-Noël AVILA, Junio C Hamano, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Fri, Oct 24, 2025 at 12:57:42PM -0400, Eric Sunshine wrote: > On Fri, Oct 24, 2025 at 6:15 AM Michal Suchánek <msuchanek@suse.de> wrote: > > On Sat, Oct 11, 2025 at 01:17:47AM -0400, Eric Sunshine wrote: > > > Third, the example seems overly complicated, especially with its use > > > of `--git-dir`, which feels less discoverable (at least to me) than, > > > say `-C`. What I have in mind is an example more like this: > > > > > > $ git clone --bare <repository-url> myproj.git > > > $ git -C myproj.git worktree add feature-a > > > $ git -C myproj.git worktree add feature-b > > > > > > That should be more than sufficient to get people up and running with > > > associating worktrees to a bare repository. > > > > That creates a mess. First part is not creating the directory to contain > > the worktrees related to the repository. Second is creating the > > worktrees inside the bare repository, contrary to any reasonabe usage > > advice. > > Sorry, I mistyped that. What I meant was: > > $ git -C myproj.git worktree add ../feature-a > > which makes the worktrees siblings of the bare repository. and requires the mental gymnastics of adjusting the paths passed to the command based on -C argument. Does not sound like a good example how to use the command. > As for first creating a directory to contain the repository and the > worktrees, I purposely omitted that step in the example since I > assume/hope that we don't need to hand-hold the user to that extent. Its much easier to reove superluous parts from the example than adding patrs that were omitted. Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example 2025-11-18 12:01 ` Michal Suchánek @ 2025-11-19 7:19 ` Eric Sunshine 0 siblings, 0 replies; 43+ messages in thread From: Eric Sunshine @ 2025-11-19 7:19 UTC (permalink / raw) To: Michal Suchánek Cc: git, Jean-Noël AVILA, Junio C Hamano, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Tue, Nov 18, 2025 at 7:01 AM Michal Suchánek <msuchanek@suse.de> wrote: > On Fri, Oct 24, 2025 at 12:57:42PM -0400, Eric Sunshine wrote: > > Sorry, I mistyped that. What I meant was: > > > > $ git -C myproj.git worktree add ../feature-a > > > > which makes the worktrees siblings of the bare repository. > > and requires the mental gymnastics of adjusting the paths passed to the > command based on -C argument. Does not sound like a good example how to > use the command. Fair enough. I happen to find the above easy to reason about, but I get your point, as well. So the remaining actionable bit from the review[*] regards spelling out in prose that hanging worktrees off of a bare repository is an explicitly supported mode of operation. [*]: https://lore.kernel.org/git/CAPig+cSNesf0UwS4=Bxe-Qn+G9y3YYPyOK+7y3q8QJk+o7jaVg@mail.gmail.com/ ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-02 13:33 ` Junio C Hamano 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek @ 2025-10-02 15:51 ` Michal Suchanek 2025-10-02 17:51 ` Kristoffer Haugsbakk 2025-10-02 18:06 ` Junio C Hamano 1 sibling, 2 replies; 43+ messages in thread From: Michal Suchanek @ 2025-10-02 15:51 UTC (permalink / raw) To: git Cc: Michal Suchanek, Junio C Hamano, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Signed-off-by: Michal Suchanek <msuchanek@suse.de> --- Documentation/git-worktree.adoc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc index ec31863aec..122b191ff9 100644 --- a/Documentation/git-worktree.adoc +++ b/Documentation/git-worktree.adoc @@ -525,6 +525,16 @@ $ popd $ git worktree remove ../temp ------------ +Side by side branch checkouts for a repository using multiple worktrees + +------------ +mkdir some-repository +cd some-repository +git clone --bare gitforge@someforge.example.com:some-org/some-repository .git +git --git-dir=.git worktree add some-branch +git --git-dir=.git worktree add another-branch +------------ + BUGS ---- Multiple checkout in general is still experimental, and the support -- 2.51.0 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-02 15:51 ` [PATCH " Michal Suchanek @ 2025-10-02 17:51 ` Kristoffer Haugsbakk 2025-10-02 18:46 ` Michal Suchánek 2025-10-02 18:47 ` Junio C Hamano 2025-10-02 18:06 ` Junio C Hamano 1 sibling, 2 replies; 43+ messages in thread From: Kristoffer Haugsbakk @ 2025-10-02 17:51 UTC (permalink / raw) To: Michal Suchanek, git Cc: Junio C Hamano, Eric Sunshine, Sergey Organov, D. Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Thu, Oct 2, 2025, at 17:51, Michal Suchanek wrote: > Signed-off-by: Michal Suchanek <msuchanek@suse.de> I think this could do with more setup and motivation. I’ve seen a lot of questions on worktrees where they introduce the problem with “I use a bare repository with worktrees”. And I was puzzled that they kept using bare repositories all the time. I’ve forgotten some of those details but I do seem to remember that they were motivated to go all-in on making a ton of worktrees, and using the the “project root” to do it. Is that what the bare-setup is getting at? ;) > --- > Documentation/git-worktree.adoc | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > index ec31863aec..122b191ff9 100644 > --- a/Documentation/git-worktree.adoc > +++ b/Documentation/git-worktree.adoc > @@ -525,6 +525,16 @@ $ popd > $ git worktree remove ../temp > ------------ > > +Side by side branch checkouts for a repository using multiple worktrees > + > +------------ > +mkdir some-repository > +cd some-repository > +git clone --bare gitforge@someforge.example.com:some-org/some-repository .git > +git --git-dir=.git worktree add some-branch > +git --git-dir=.git worktree add another-branch > +------------ This works for me. But why not this? git clone --bare <repo> some-repository cd some-repository git worktree add some-branch git worktree add another-branch > + > BUGS > ---- > Multiple checkout in general is still experimental, and the support > -- > 2.51.0 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-02 17:51 ` Kristoffer Haugsbakk @ 2025-10-02 18:46 ` Michal Suchánek 2025-10-02 18:47 ` Junio C Hamano 1 sibling, 0 replies; 43+ messages in thread From: Michal Suchánek @ 2025-10-02 18:46 UTC (permalink / raw) To: Kristoffer Haugsbakk Cc: git, Junio C Hamano, Eric Sunshine, Sergey Organov, D. Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Thu, Oct 02, 2025 at 07:51:20PM +0200, Kristoffer Haugsbakk wrote: > On Thu, Oct 2, 2025, at 17:51, Michal Suchanek wrote: > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > > I think this could do with more setup and motivation. > > I’ve seen a lot of questions on worktrees where they introduce the > problem with “I use a bare repository with worktrees”. And I was > puzzled that they kept using bare repositories all the time. I’ve > forgotten some of those details but I do seem to remember that they were > motivated to go all-in on making a ton of worktrees, and using the the > “project root” to do it. > > Is that what the bare-setup is getting at? ;) It shows one way how to make a ton of worktrees without having them step on each other, hopefully avoiding this pitfall at least in some cases. > > --- > > Documentation/git-worktree.adoc | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > > index ec31863aec..122b191ff9 100644 > > --- a/Documentation/git-worktree.adoc > > +++ b/Documentation/git-worktree.adoc > > @@ -525,6 +525,16 @@ $ popd > > $ git worktree remove ../temp > > ------------ > > > > +Side by side branch checkouts for a repository using multiple worktrees > > + > > +------------ > > +mkdir some-repository > > +cd some-repository > > +git clone --bare gitforge@someforge.example.com:some-org/some-repository .git > > +git --git-dir=.git worktree add some-branch > > +git --git-dir=.git worktree add another-branch > > +------------ > > This works for me. But why not this? > > git clone --bare <repo> some-repository > cd some-repository > git worktree add some-branch > git worktree add another-branch I would certainly not recommend that. There is great potential for conflicting with git internal structures of the bare repository. Thanks Michal ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-02 17:51 ` Kristoffer Haugsbakk 2025-10-02 18:46 ` Michal Suchánek @ 2025-10-02 18:47 ` Junio C Hamano 1 sibling, 0 replies; 43+ messages in thread From: Junio C Hamano @ 2025-10-02 18:47 UTC (permalink / raw) To: Kristoffer Haugsbakk Cc: Michal Suchanek, git, Eric Sunshine, Sergey Organov, D. Ben Knoble, Jason Cho, Jakub T. Jankiewicz "Kristoffer Haugsbakk" <kristofferhaugsbakk@fastmail.com> writes: > This works for me. But why not this? > > git clone --bare <repo> some-repository > cd some-repository > git worktree add some-branch > git worktree add another-branch Do you mean "some-repository/config" is the local configuration file, next to it there are "some-branch" and "another-branch" directories, and you have to have some way to tell that, among direct subdirectories of "some-repository/", "some-branch/" is a worktree while refs/ is not? No thanks ;-). ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-02 15:51 ` [PATCH " Michal Suchanek 2025-10-02 17:51 ` Kristoffer Haugsbakk @ 2025-10-02 18:06 ` Junio C Hamano 2025-10-02 18:39 ` Michal Suchánek 1 sibling, 1 reply; 43+ messages in thread From: Junio C Hamano @ 2025-10-02 18:06 UTC (permalink / raw) To: Michal Suchanek Cc: git, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz Michal Suchanek <msuchanek@suse.de> writes: > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > --- > Documentation/git-worktree.adoc | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > index ec31863aec..122b191ff9 100644 > --- a/Documentation/git-worktree.adoc > +++ b/Documentation/git-worktree.adoc > @@ -525,6 +525,16 @@ $ popd > $ git worktree remove ../temp > ------------ > > +Side by side branch checkouts for a repository using multiple worktrees > + > +------------ > +mkdir some-repository > +cd some-repository > +git clone --bare gitforge@someforge.example.com:some-org/some-repository .git > +git --git-dir=.git worktree add some-branch > +git --git-dir=.git worktree add another-branch > +------------ It is a good example to have a bare clone and get worktrees attached to it, but I do not think that it is a great idea to call that bare clone ".git". It makes it confusing if that some-repository/ directory that has a ".git" directory is a non-bare clone with no working tree files, or if it is a directory that Git has no knowledge about, that happens to have a single bare repository plus worktrees. The answer is the latter, but I suspect that Git itself would probably be confused (i.e. "cd some-repository && git status" ---if you try it, what does it say?). Naming it after the project may make it more apparent what is going on when the user goes into that top-level shell directory, perhaps like this, if we were working with a "bunny" project: mkdir bunny cd bunny git clone --bare gitforge@someforge.example.com:some-org/bunny bunny.git git --git-dir=bunny.git worktree add some-branch git --git-dir=bunny.git worktree add another-branch Then when you "cd bunny && ls", you'd see the bare repository bunny.git with two checkouts. Having said all that. I know some folks like such a layout for some (perhaps ideological) reason (i.e. no checkout is more special than others, everybody is equal), but I am not absolutely sure if it works better in a larger workflow in practice than having a primary worktree that is not a bare repository. If you do the above with a non-bare repository in the center, it would look like this: mkdir bunny-project cd bunny-project git clone gitforge@someforge.example.com:some-org/bunny main cd main git worktree add ../my-topic-1 git worktree add ../my-topic-2 and have my interaction with the upstream project only from inside the primary worktree, i.e., "main". Additional worktrees are more or less ephemeral, and can go away. > + > BUGS > ---- > Multiple checkout in general is still experimental, and the support ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/2] doc: git-worktree: Add side by side branch checkout example 2025-10-02 18:06 ` Junio C Hamano @ 2025-10-02 18:39 ` Michal Suchánek 0 siblings, 0 replies; 43+ messages in thread From: Michal Suchánek @ 2025-10-02 18:39 UTC (permalink / raw) To: Junio C Hamano Cc: git, Eric Sunshine, Sergey Organov, Ben Knoble, Jason Cho, Jakub T. Jankiewicz On Thu, Oct 02, 2025 at 11:06:58AM -0700, Junio C Hamano wrote: > Michal Suchanek <msuchanek@suse.de> writes: > > > Signed-off-by: Michal Suchanek <msuchanek@suse.de> > > --- > > Documentation/git-worktree.adoc | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/Documentation/git-worktree.adoc b/Documentation/git-worktree.adoc > > index ec31863aec..122b191ff9 100644 > > --- a/Documentation/git-worktree.adoc > > +++ b/Documentation/git-worktree.adoc > > @@ -525,6 +525,16 @@ $ popd > > $ git worktree remove ../temp > > ------------ > > > > +Side by side branch checkouts for a repository using multiple worktrees > > + > > +------------ > > +mkdir some-repository > > +cd some-repository > > +git clone --bare gitforge@someforge.example.com:some-org/some-repository .git > > +git --git-dir=.git worktree add some-branch > > +git --git-dir=.git worktree add another-branch > > +------------ > > It is a good example to have a bare clone and get worktrees attached > to it, but I do not think that it is a great idea to call that bare > clone ".git". It makes it confusing if that some-repository/ > directory that has a ".git" directory is a non-bare clone with no > working tree files, or if it is a directory that Git has no > knowledge about, that happens to have a single bare repository plus > worktrees. The answer is the latter, but I suspect that Git itself > would probably be confused (i.e. "cd some-repository && git status" > ---if you try it, what does it say?). git status fatal: this operation must be run in a work tree > Naming it after the project may make it more apparent what is going > on when the user goes into that top-level shell directory, perhaps > like this, if we were working with a "bunny" project: > > mkdir bunny > cd bunny > git clone --bare gitforge@someforge.example.com:some-org/bunny bunny.git > git --git-dir=bunny.git worktree add some-branch > git --git-dir=bunny.git worktree add another-branch > > Then when you "cd bunny && ls", you'd see the bare repository > bunny.git with two checkouts. That also works. > > Having said all that. > > I know some folks like such a layout for some (perhaps ideological) > reason (i.e. no checkout is more special than others, everybody is > equal), but I am not absolutely sure if it works better in a larger > workflow in practice than having a primary worktree that is not a > bare repository. If you do the above with a non-bare repository in > the center, it would look like this: > > mkdir bunny-project > cd bunny-project > git clone gitforge@someforge.example.com:some-org/bunny main > cd main > git worktree add ../my-topic-1 > git worktree add ../my-topic-2 > > and have my interaction with the upstream project only from inside > the primary worktree, i.e., "main". Additional worktrees are more > or less ephemeral, and can go away. Yes, that's a possible use case. Also git worktree add /dev/shm/do-some-testing However, that's not the intended use here. Rather it's one worktree per branch, no branch switching as a result. I recall some VCSes had this as default or only way to work with different branches, and not switching branches all the time certainly has its advantages. Thanks Michal > > > + > > BUGS > > ---- > > Multiple checkout in general is still experimental, and the support ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 21:29 ` Eric Sunshine 2025-10-01 22:27 ` Junio C Hamano @ 2025-11-17 22:36 ` Johannes Schindelin 2025-11-17 22:57 ` Junio C Hamano 1 sibling, 1 reply; 43+ messages in thread From: Johannes Schindelin @ 2025-11-17 22:36 UTC (permalink / raw) To: Eric Sunshine Cc: Junio C Hamano, Sergey Organov, Ben Knoble, Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git Hi Eric, On Wed, 1 Oct 2025, Eric Sunshine wrote: > [...] 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). > [...] > > 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. And indeed I do, and continue to do so because the counter arguments in that email discussion looked quite weak to me. In the one instance where I heeded that well-meant advice to create worktrees outside of my main worktree, I lost work when I had cleaned up that main worktree after verifying with `git status` that there was no unfinished business to take care of before deleting the repository. Because that secondary worktree (which did contain unfinished business, including a carefully crafted series of commits) was now obviously no longer a worktree but only a tree without a working `.git`. Ciao, Johannes ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-11-17 22:36 ` What is the reason behind not hiding git worktrees from git? Johannes Schindelin @ 2025-11-17 22:57 ` Junio C Hamano 0 siblings, 0 replies; 43+ messages in thread From: Junio C Hamano @ 2025-11-17 22:57 UTC (permalink / raw) To: Johannes Schindelin Cc: Eric Sunshine, Sergey Organov, Ben Knoble, Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: > that main worktree after verifying with `git status` that there was no > unfinished business to take care of before deleting the repository. > Because that secondary worktree (which did contain unfinished business, > including a carefully crafted series of commits) was now obviously no > longer a worktree but only a tree without a working `.git`. Ouch, that is a tough one. It is very hard to interfere and stop your "rm -fr" based on what Git could find (in other words, your "rm" lacks the "pre-something" hook). Of course, an argument can be made that you should have also asked `git worktree list` if there are other worktrees, in addition to asking `git status`, but I wonder if it would have helped to have the information in the `git status` output so that we can always trust that it is sufficient to ask a single command without doing anything else? As "separate worktrees" is a feature to allow users to more or less independently work in each separate worktree, without having to worry about what they are doing in the other worktrees, cramming too much into `git status` would degrade the end-user experience and it takes a fine balance. I think that one of the reasons why the "outside the working tree" layout is recommended is to prevent us from "git add ." (or other overly wide pathspec) to accidentally add these embedded worktrees to the main project, but such a mistake is at least not as destructive as "rm -fr". ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: What is the reason behind not hiding git worktrees from git? 2025-10-01 18:54 ` Junio C Hamano 2025-10-01 20:22 ` Sergey Organov @ 2025-10-02 2:33 ` Ben Knoble 1 sibling, 0 replies; 43+ messages in thread From: Ben Knoble @ 2025-10-02 2:33 UTC (permalink / raw) To: Junio C Hamano; +Cc: Michal Suchánek, Jason Cho, Jakub T. Jankiewicz, git > Le 1 oct. 2025 à 14:54, Junio C Hamano <gitster@pobox.com> a écrit : > > Ben Knoble <ben.knoble@gmail.com> writes: > >>> The impact is that the list of worktrees would have to be read to get >>> status. As status is not particularly cheap operation in any case I >>> would expect the problem to be minor. >> >> I believe status information is used for the shell prompt info, so >> performance hits there have a cost. > > Sure, but an embedded git-controlled working tree _should_ be > flagged as an untracked entity, _unless_ it is ignore'd, no? Sorry, I’m not disagreeing with that here? Merely pointing out if that proposed changes affect git-status performance for the worse I will be disappointed :) > That is how you would add a new submodule to your project after all. > So, if you want to ignore them, just add them to .git/info/exclude > or something, perhaps? > > Why do people even want to have such a layout, unless they want to > make it a submodule (or deliberate subdirectory that is unrelated)? [snip: a better way] Yep, I agree that’s easier, but I shouldn’t judge other’s workflows (I do it all the time 😅). ^ permalink raw reply [flat|nested] 43+ messages in thread
end of thread, other threads:[~2025-11-19 8:14 UTC | newest] Thread overview: 43+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-09-27 13:28 What is the reason behind not hiding git worktrees from git? Jakub T. Jankiewicz 2025-09-27 16:52 ` Junio C Hamano 2025-09-27 17:55 ` Michal Suchánek 2025-09-27 21:08 ` Jason Cho 2025-09-27 21:26 ` Jason Cho 2025-09-30 10:30 ` Michal Suchánek 2025-09-30 15:47 ` Junio C Hamano 2025-11-19 8:13 ` Michal Suchánek 2025-09-30 10:37 ` Michal Suchánek 2025-10-01 12:16 ` Ben Knoble 2025-10-01 18:54 ` Junio C Hamano 2025-10-01 20:22 ` Sergey Organov 2025-10-01 20:48 ` Junio C Hamano 2025-10-01 21:27 ` Jakub T. Jankiewicz 2025-10-01 22:07 ` Junio C Hamano 2025-10-01 21:29 ` Eric Sunshine 2025-10-01 22:27 ` Junio C Hamano 2025-10-02 8:38 ` Michal Suchánek 2025-10-02 13:33 ` Junio C Hamano 2025-10-02 15:51 ` [PATCH 1/2] doc: git-worktree: Link to examples Michal Suchanek 2025-10-02 17:42 ` Kristoffer Haugsbakk 2025-10-02 17:44 ` Junio C Hamano 2025-10-02 18:55 ` Michal Suchánek 2025-10-05 20:52 ` Jean-Noël AVILA 2025-10-10 17:10 ` Michal Suchánek 2025-10-10 17:04 ` [PATCH v2 " Michal Suchanek 2025-10-11 4:40 ` Eric Sunshine 2025-10-10 17:04 ` [PATCH v2 2/2] doc: git-worktree: Add side by side branch checkout example Michal Suchanek 2025-10-11 5:17 ` Eric Sunshine 2025-10-23 19:40 ` Junio C Hamano 2025-10-24 10:15 ` Michal Suchánek 2025-10-24 16:57 ` Eric Sunshine 2025-11-18 12:01 ` Michal Suchánek 2025-11-19 7:19 ` Eric Sunshine 2025-10-02 15:51 ` [PATCH " Michal Suchanek 2025-10-02 17:51 ` Kristoffer Haugsbakk 2025-10-02 18:46 ` Michal Suchánek 2025-10-02 18:47 ` Junio C Hamano 2025-10-02 18:06 ` Junio C Hamano 2025-10-02 18:39 ` Michal Suchánek 2025-11-17 22:36 ` What is the reason behind not hiding git worktrees from git? Johannes Schindelin 2025-11-17 22:57 ` Junio C Hamano 2025-10-02 2:33 ` Ben Knoble
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).