threads / discuss / 53858

'git rev-parse --show-toplevel' errors out with per-worktree configs

Subject: 'git rev-parse --show-toplevel' errors out with per-worktree configs

## tl;dr

3 messages between Jul 14, 2020 and Jul 14, 2020.

replies: 2people: 1as markdown or json

Clement Moyroud· Jul 14, 2020, 19:40 UTC · lore
Hello,

I have a bare repository clone that I create worktrees off. This works fine, including 'git rev-parse --show-toplevel'.

I enabled per-worktree configs using 'git config --local extensions.worktreeconfig=true', and now I can't get the toplevel anymore:

> git rev-parse --show-toplevel
fatal: this operation must be run in a work tree

Disabling per-worktree configs makes it work again. This also works fine on a non-bare repository clone.

IOW, this works: git clone <url> non-bare (cd non-bare && git worktree add -b master2 ../wtree1 master) (cd wtree1 && git rev-parse --show-toplevel)

This does not: git clone -c extensions.worktreeConfig=true <url> bare.git (cd bare.git && git worktree add -b master2 ../wtree2 master) (cd wtree2 && git rev-parse --show-toplevel)

Is this a bug, or am I missing something?
Thanks,
Clément
Clement Moyroud· Jul 14, 2020, 20:38 UTC · re: Clement Moyroud · lore

Re: 'git rev-parse --show-toplevel' errors out with per-worktree configs

Show 10 quoted lines
> IOW, this works:
> git clone <url> non-bare
> (cd non-bare && git worktree add -b master2 ../wtree1 master)
> (cd wtree1 && git rev-parse --show-toplevel)
>
> This does not:
> git clone -c extensions.worktreeConfig=true <url> bare.git
> (cd bare.git && git worktree add -b master2 ../wtree2 master)
> (cd wtree2 && git rev-parse --show-toplevel)
>
Sorry, I mixed up my examples.

This works: git clone -c extensions.worktreeConfig=true <url> non-bare (cd non-bare && git worktree add -b master2 ../wtree1 master) (cd wtree1 && git rev-parse --show-toplevel)

This does not: git clone -c extensions.worktreeConfig=true --mirror <url> bare.git (cd bare.git && git worktree add -b master2 ../wtree2 master) (cd wtree2 && git rev-parse --show-toplevel)

Clement Moyroud· Jul 14, 2020, 21:34 UTC · re: Clement Moyroud · lore

Re: 'git rev-parse --show-toplevel' errors out with per-worktree configs

Show 22 quoted lines
> > IOW, this works:
> > git clone <url> non-bare
> > (cd non-bare && git worktree add -b master2 ../wtree1 master)
> > (cd wtree1 && git rev-parse --show-toplevel)
> >
> > This does not:
> > git clone -c extensions.worktreeConfig=true <url> bare.git
> > (cd bare.git && git worktree add -b master2 ../wtree2 master)
> > (cd wtree2 && git rev-parse --show-toplevel)
> >
>
> Sorry, I mixed up my examples.
>
> This works:
> git clone -c extensions.worktreeConfig=true <url> non-bare
> (cd non-bare && git worktree add -b master2 ../wtree1 master)
> (cd wtree1 && git rev-parse --show-toplevel)
>
> This does not:
> git clone -c extensions.worktreeConfig=true --mirror <url> bare.git
> (cd bare.git && git worktree add -b master2 ../wtree2 master)
> (cd wtree2 && git rev-parse --show-toplevel)

OK, I figured it out by looking at environment.c. The issue is that the base mirror is bare, but the worktree isn't. This makes it work: (cd wtree2 && git config --worktree core.bare true)

This is confusing - should this be set automatically, or referenced more clearly in the 'Configuration File' section of the git-worktree doc?

Thanks,
Clément

← back to recent threads