Hi Duy, On Wed, 13 Jul 2016, Duy Nguyen wrote: > On Wed, Jul 13, 2016 at 10:20 AM, Johannes Schindelin > <Johannes.Schindelin@xxxxxx> wrote: > > > > On Tue, 12 Jul 2016, Duy Nguyen wrote: > > > >> On Tue, Jul 12, 2016 at 5:51 PM, Jeff King <peff@xxxxxxxx> wrote: > >> > On Tue, Jul 12, 2016 at 05:46:12PM +0200, Duy Nguyen wrote: > >> > > >> >> I'm not opposed to letting one worktree see everything, but this move > >> >> makes it harder to write new scripts (or new builtin commands, even) > >> >> that works with both single and multiple worktrees because you refer > >> >> to one ref (in current worktree perspective) differently. If we kill > >> >> of the main worktree (i.e. git init always creates a linked worktree) > >> >> then it's less of a problem, but still a nuisance to write > >> >> refs/worktree/$CURRENT/<something> everywhere. > >> > > >> > True. I gave a suggestion for the reading side, but the writing side > >> > would still remain tedious. > >> > > >> > I wonder if, in a worktree, we could simply convert requests to read or > >> > write names that do not begin with "refs/" as "refs/worktree/$CURRENT/"? > >> > That makes it a read/write-time alias conversion, but the actual storage > >> > is just vanilla (so the ref storage doesn't need to care, and > >> > reachability just works). > >> > >> A conversion like that is already happening, but it works at > >> git_path() level instead and maps anything outside refs/ to > >> worktrees/$CURRENT. > > > > Wouldn't you agree that the entire discussion goes into a direction that > > reveals that it might simply be a better idea to require commands that want > > to have per-worktree refs to do that explicitly? > > No. Oh? So you do not see that we are already heading into serious trouble ourselves? > I prefer we have a single interface for dealing with _any_ worktree. I agree. So far, I did not see an interface, though, but the idea that we should somehow fake things so that there does not *have* to be an interface. > > The same holds true for the config, BTW. I really have no love for the > > idea to make the config per-worktree. It just holds too many nasty > > opportunities for violate the Law of Least Surprises. > > > > Just to name one: imagine you check out a different branch in worktree A, > > then switch worktree B to the branch that A had, and all of a sudden you > > may end up with a different upstream! > > Everything in moderation. You wouldn't want to enable sparse checkout > on one worktree and it suddenly affects all worktrees because > core.sparsecheckout is shared. And submodules are known not to work > when core.worktree is still shared. We have precendence for config variables that are global but also allow per-<something> overrides. Think e.g. the http.* variables. The point is: this solution still uses *one* config per repo. > I will not enforce any rule (unless it's very obvious that the other > way is wrong, like core.worktree). I will give you a rifle and you can > either hunt for food or shoot your foot. In other words, you should be > able to share everything if you like it that way while someone else > can share just some config vars, or even nothing in config file. You gave me a rifle alright, and I shot into my foot (by losing objects to auto-gc). I just did not expect it to be a rifle. To keep with the analogy: let's not build arms, but a kick-ass tool. And I seriously disagree that per-worktree refs, reflogs or config are part of said tool. Ciao, Dscho -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html