> > > - Teach get_main_worktree() to use is_bare_repository() instead, > > > introduced in 7d1864ce67 ("Introduce is_bare_repository() and > > > core.bare configuration variable", 2007-01-07) and updated in > > > e90fdc39b6 ("Clean up work-tree handling", 2007-08-01). This solves > > > the "git branch -D <name>" problem described above. However... > > > > > > - If a repository has core.bare=1 but the "git" command is being run > > > from one of its added worktrees, is_bare_repository() returns false > > > (which is fine, since there is a worktree available). However, > > > commands like "git worktree list" currently distinguish between a > > > repository that has core.bare=1 but has a worktree available, and a > > > repository that is truly non-bare (core.bare=0). To preserve this > > > distinction, also check core.bare when setting is_bare. If > > > core.bare=1, trust it, and otherwise, use is_bare_repository(). > > > > I am not sure if the latter is worth keeping, but the former > > definitely is a huge improvement, I would imagine. > > I think that both are improvements, with the former definitely being the > more impactful one. Thanks. These comments spurred me to look at it a bit closer, and omitting the latter not only results in "git worktree list" changes, but means that the following test now fails: test_expect_success 'bare main worktree has HEAD at branch deleted by secondary worktree' ' git init nonbare && test_commit -C nonbare x && git clone --bare nonbare bare && git -C bare worktree add --detach ../secondary master && git -C secondary branch -D master ' (At current master, it succeeds.) In the next reroll, I'll include this test and update the commit message to use this as a rationale instead. > > Somebody did "git branch -D <that-branch>" by accident in a submodule > > checkout, or something? > > /me shudders at the thought of it Yes, that happened. > The patch makes tons of sense to me. Thanks!