I have tested this successfully with git 2.10.1 built from source (failing), then patched as above (passing). Thanks! M. On Wed, Oct 12, 2016 at 11:41 AM, Dennis Kaarsemaker <dennis@xxxxxxxxxxxxxxx> wrote: > In bare repositories, get_worktrees() still returns the main repository, > so git worktree list can show it. ignore it in find_shared_symref so we > can still check out the main branch. > > Signed-off-by: Dennis Kaarsemaker <dennis@xxxxxxxxxxxxxxx> > --- > t/t2025-worktree-add.sh | 8 ++++++++ > worktree.c | 2 ++ > 2 files changed, 10 insertions(+) > > On Sun, 2016-10-09 at 17:52 +0700, Duy Nguyen wrote: >> On Sun, Oct 9, 2016 at 2:51 PM, Dennis Kaarsemaker > <dennis@xxxxxxxxxxxxxxx> wrote: >> > On Sat, 2016-10-08 at 19:30 -0500, Michael Tutty wrote: >> > > >> > > The only exception seems to be merging to master. When I do git >> > > worktree add /tmp/path/to/worktree master I get an error: >> > > >> > > [fatal: 'master' is already checked out at '/path/to/bare/repo'] >> > > >> > >> > The worktree code treats the base repo as a worktree, even if it's >> > bare. For the purpose of being able to do a checkout of the main branch >> > of a bare repo, this patch should do: >> > >> --snip-- >> >> You're fast :) I'm still studying 8d9fdd7 (worktree.c: check whether >> branch is rebased in another worktree - 2016-04-22). But yeah that >> should fix it. > > OK, so here it is as a proper patch. > > D. > > diff --git a/t/t2025-worktree-add.sh b/t/t2025-worktree-add.sh > index 4bcc335..2996c38 100755 > --- a/t/t2025-worktree-add.sh > +++ b/t/t2025-worktree-add.sh > @@ -138,6 +138,14 @@ test_expect_success 'checkout from a bare repo without "add"' ' > ) > ' > > ++test_expect_success '"add" default branch of a bare repo' ' > + ( > + git clone --bare . bare2 && > + cd bare2 && > + git worktree add ../there3 master > + ) > +' > + > test_expect_success 'checkout with grafts' ' > test_when_finished rm .git/info/grafts && > test_commit abc && > diff --git a/worktree.c b/worktree.c > index 5acfe4c..35e95b7 100644 > --- a/worktree.c > +++ b/worktree.c > @@ -345,6 +345,8 @@ const struct worktree *find_shared_symref(const char *symref, > > for (i = 0; worktrees[i]; i++) { > struct worktree *wt = worktrees[i]; > + if(wt->is_bare) > + continue; > > if (wt->is_detached && !strcmp(symref, "HEAD")) { > if (is_worktree_being_rebased(wt, target)) { > -- > 2.10.1-356-g947a599 > > > -- > Dennis Kaarsemaker <dennis@xxxxxxxxxxxxxxx> > http://twitter.com/seveas -- Michael Tutty, CTO e: mtutty@xxxxxxxxxxxxxxx t: @mtutty, @gforgegroup v: 515-789-0772 w: http://gforgegroup.com, http://gforge.com