Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > When 'git init' is called from a linked worktree, '.git' dir as the main > '.git' (i.e. $GIT_COMMON_DIR) and populate the whole repository skeleton > in there. It does not harm anything (*) but it is still wrong. -ECANNOTPARSE. Did you mean "... worktree, we treat '.git' dir as if it is the main '.git' ..." or something entirely different? > diff --git a/builtin/init-db.c b/builtin/init-db.c > index 3a45f0b..6d9552e 100644 > --- a/builtin/init-db.c > +++ b/builtin/init-db.c > @@ -138,7 +138,7 @@ static void copy_templates(const char *template_dir) > goto close_free_return; > } > > - strbuf_addstr(&path, get_git_dir()); > + strbuf_addstr(&path, get_git_common_dir()); > strbuf_complete(&path, '/'); > copy_templates_1(&path, &template_path, dir); > close_free_return: > diff --git a/t/t0001-init.sh b/t/t0001-init.sh > index a6fdd5e..d64e5e3 100755 > --- a/t/t0001-init.sh > +++ b/t/t0001-init.sh > @@ -384,4 +384,19 @@ test_expect_success MINGW 'bare git dir not hidden' ' > ! is_hidden newdir > ' > > +test_expect_success 're-init from a linked worktree' ' > + git init main-worktree && > + ( > + cd main-worktree && > + test_commit first && > + git worktree add ../linked-worktree && > + mv .git/info/exclude expected-exclude && > + find .git/worktrees -print | sort >expected && > + git -C ../linked-worktree init && > + test_cmp expected-exclude .git/info/exclude && > + find .git/worktrees -print | sort >actual && > + test_cmp expected actual > + ) > +' > + > test_done