On Wed, Dec 29, 2021 at 11:40 PM Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote: > > On Wed, Dec 29, 2021 at 4:40 AM Elijah Newren <newren@xxxxxxxxx> wrote:> > > On Tue, Dec 28, 2021 at 1:32 PM Derrick Stolee via GitGitGadget > > <gitgitgadget@xxxxxxxxx> wrote: > > > ++init-worktree-config:: > > > ++ > > > ++Initialize config settings to enable worktree-specific config settings. > > > ++This will set `core.repositoryFormatversion=1` and enable > > > ++`extensions.worktreeConfig`, which might cause some third-party tools from > > > ++being able to operate on your repository. See CONFIGURATION FILE for more > > > ++details. > > > > So, if users attempt to use `git worktree add` or `git sparse-checkout > > {init,set}` without first running this, they can break other > > worktrees. And if they do run this new command, they potentially > > break third-party tools or older git versions. > > When you say "can break other worktrees", you don't necessarily mean > that in general but rather in regard to sparse-checkout -- in > particular, the sparse-checkout config settings and the > `info/sparse-checkout file` -- correct? (Genuine question; I want to > make sure that I'm actually understanding the issues under > discussion.) Yes, thanks for the clarifications. ... > > So, I'd like to reiterate my earlier suggestion which would avoid > > these regressions while also fixing the reported bug: > > * If core.bare=true or core.worktree is set, then at `git worktree > > add` time, automatically run the logic you have here for > > init-worktree-config. Having either of those config settings with > > multiple worktrees is currently broken in all git versions and likely > > in most all external tools. As such, being aggressive in the new > > config settings to allow new versions of git to work seems totally > > safe to me -- we can't be any more broken than we already were. > > * If core.bare=false and core.worktree is not set, then: > > * `git sparse-checkout {init,set}` should set > > extensions.worktreeConfig if not already set, and always set the > > core.sparse* and index.sparse settings in worktree-specific files. > > * `git worktree add`, if extensions.worktreeConfig is already set, > > will copy both the info/sparse-checkout file and the config.worktree > > settings (module core.bare and core.worktree, if present) to the new > > worktree > > Thanks for the clearly written enumeration of how you expect this to > work. This summary pretty well (or entirely) captures the conclusions > I arrived at, as well, after devoting a chunk of time today thinking > through the cases. If I'm understanding everything correctly, the > approach outlined here solves the bare-worktree problem in the least > invasive and least dangerous way (for older Git versions and foreign > tools). And we don't even need the `git worktree init-worktree-config` > subcommand (though we need the underlying functionality). I'm glad it helps, and that we appear to be moving towards consensus. :-)