{"thread":{"id":"53858","subject":"'git rev-parse --show-toplevel' errors out with per-worktree configs","startedAt":"2020-07-14T19:40:54Z","lastAt":"2020-07-14T21:38:30Z","messageCount":3,"participants":["Clement Moyroud"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"401558","messageId":"CABXAcUxw5EA6jPB93C-Cfg-tycLMQSKUgrLkLXSQUZPHeEva9Q@mail.gmail.com","threadId":"53858","inReplyTo":null,"subject":"'git rev-parse --show-toplevel' errors out with per-worktree configs","fromName":"Clement Moyroud","fromEmail":"clement.moyroud@gmail.com","sentAt":"2020-07-14T19:40:40Z","receivedAt":"2020-07-14T19:40:54Z","isPatch":false,"sender":{"key":"clement.moyroud@gmail.com","avatar":null},"body":"Hello,\n\nI have a bare repository clone that I create worktrees off. This works\nfine, including 'git rev-parse --show-toplevel'.\n\nI enabled per-worktree configs using 'git config --local\nextensions.worktreeconfig=true', and now I can't get the toplevel\nanymore:\n> git rev-parse --show-toplevel\nfatal: this operation must be run in a work tree\n\nDisabling per-worktree configs makes it work again. This also works\nfine on a non-bare repository clone.\n\nIOW, this works:\ngit clone <url> non-bare\n(cd non-bare && git worktree add -b master2 ../wtree1 master)\n(cd wtree1 && git rev-parse --show-toplevel)\n\nThis does not:\ngit clone -c extensions.worktreeConfig=true <url> bare.git\n(cd bare.git && git worktree add -b master2 ../wtree2 master)\n(cd wtree2 && git rev-parse --show-toplevel)\n\nIs this a bug, or am I missing something?\n\nThanks,\n\nClément\n"},{"id":"401565","messageId":"CABXAcUx9ubCi485xoawSERH4pEjAFJcfGbdNiRL7KkwAmFrMsw@mail.gmail.com","threadId":"53858","inReplyTo":"CABXAcUzvZgHwsfL8VaevnDeyyce_5sWtd2istA55CgnzFE1Z6A@mail.gmail.com","subject":"Re: 'git rev-parse --show-toplevel' errors out with per-worktree configs","fromName":"Clement Moyroud","fromEmail":"clement.moyroud@gmail.com","sentAt":"2020-07-14T21:34:49Z","receivedAt":"2020-07-14T21:35:04Z","isPatch":false,"sender":{"key":"clement.moyroud@gmail.com","avatar":null},"body":"> > IOW, this works:\n> > git clone <url> non-bare\n> > (cd non-bare && git worktree add -b master2 ../wtree1 master)\n> > (cd wtree1 && git rev-parse --show-toplevel)\n> >\n> > This does not:\n> > git clone -c extensions.worktreeConfig=true <url> bare.git\n> > (cd bare.git && git worktree add -b master2 ../wtree2 master)\n> > (cd wtree2 && git rev-parse --show-toplevel)\n> >\n>\n> Sorry, I mixed up my examples.\n>\n> This works:\n> git clone -c extensions.worktreeConfig=true <url> non-bare\n> (cd non-bare && git worktree add -b master2 ../wtree1 master)\n> (cd wtree1 && git rev-parse --show-toplevel)\n>\n> This does not:\n> git clone -c extensions.worktreeConfig=true --mirror <url> bare.git\n> (cd bare.git && git worktree add -b master2 ../wtree2 master)\n> (cd wtree2 && git rev-parse --show-toplevel)\n\nOK, I figured it out by looking at environment.c. The issue is that\nthe base mirror is bare, but the worktree isn't. This makes it work:\n(cd wtree2 && git config --worktree core.bare true)\n\nThis is confusing - should this be set automatically, or referenced\nmore clearly in the 'Configuration File' section of the git-worktree\ndoc?\n\nThanks,\n\nClément\n"},{"id":"401566","messageId":"CABXAcUzvZgHwsfL8VaevnDeyyce_5sWtd2istA55CgnzFE1Z6A@mail.gmail.com","threadId":"53858","inReplyTo":"CABXAcUxw5EA6jPB93C-Cfg-tycLMQSKUgrLkLXSQUZPHeEva9Q@mail.gmail.com","subject":"Re: 'git rev-parse --show-toplevel' errors out with per-worktree configs","fromName":"Clement Moyroud","fromEmail":"clement.moyroud@gmail.com","sentAt":"2020-07-14T20:38:07Z","receivedAt":"2020-07-14T21:38:30Z","isPatch":false,"sender":{"key":"clement.moyroud@gmail.com","avatar":null},"body":"> IOW, this works:\n> git clone <url> non-bare\n> (cd non-bare && git worktree add -b master2 ../wtree1 master)\n> (cd wtree1 && git rev-parse --show-toplevel)\n>\n> This does not:\n> git clone -c extensions.worktreeConfig=true <url> bare.git\n> (cd bare.git && git worktree add -b master2 ../wtree2 master)\n> (cd wtree2 && git rev-parse --show-toplevel)\n>\n\nSorry, I mixed up my examples.\n\nThis works:\ngit clone -c extensions.worktreeConfig=true <url> non-bare\n(cd non-bare && git worktree add -b master2 ../wtree1 master)\n(cd wtree1 && git rev-parse --show-toplevel)\n\nThis does not:\ngit clone -c extensions.worktreeConfig=true --mirror <url> bare.git\n(cd bare.git && git worktree add -b master2 ../wtree2 master)\n(cd wtree2 && git rev-parse --show-toplevel)\n"}]}