Re: branch.autoSetupMerge option for "if name matches only"?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Xavier,

Thanks for the follow-up.

>I found this message when trying to see if someone had already suggested
> something along those lines.

Did you find any other related threads that could add context? I did
not find anything when I looked.

> what I wanted to propose was to only automatically setup the merge on
> implicit remote tracking branches

While I understand this as a personal expectation/preference, that
doesn't seem to align with the expectations of the "beginner users"
that I interact with;

generally, they expect a branch that is "the local version of a remote
branch" to behave one way, and a branch that "was 'branched' from the
then-HEAD of a remote branch" to behave another way - regardless of
whether a given user knows the "pretend I already have the branch
locally / create it on-the-fly" syntax, or is explicit about saying "I
want to work on (for example) master which I know is origin/master on
the remote".

> As far as I'm concerned, `git switch` actually behaving as documented
> would resolve the entire issue

I'm not sure I understand this. I just tested and got exactly what I
expected from the doc:

$ git -c merge.autosetupmerge=false switch -t origin/mybranch
Branch 'mybranch' set up to track remote branch 'mybranch' from 'origin'.
Switched to a new branch 'mybranch'

I agree being able to say "git switch mybranch", without the other
side effects of merge.autosetupmerge=true, would be convenient... but
then I'm arguing for a broader change and (in my opinion) better value
of "merge.autosetupmerge" altogether :)

Fwiw, I submitted a patch introducing this
"merge.autosetupmerge=simple" option earlier today, but no reactions
yet. I don't know whether that's because project members disagree that
there is inherent unnecessary complexity facing "beginners" in the
current behavior, or disagree that this is a reasonable direction to
reduce that complexity, or are frustrated with my spotty participation
record in this mailing list, or the terrible quality of my C- and
project-novice code, or simply haven't looked at this topic yet!

The patch series is titled "adding new branch.autosetupmerge option "simple"".

Thanks again,
Tao


On Wed, Feb 9, 2022 at 2:46 PM Xavier Morel <xmo@xxxxxxxx> wrote:
>
> I found this message when trying to see if someone had already suggested
> something along those lines.
>
> In fact I would be even more restrictive: what I wanted to propose was
> to only automatically setup the merge on implicit remote tracking
> branches, that is:
>
>      git switch foo
>
> if there is no such branch locally will look for the corresponding
> branch in the remotes, and will create a matching local one. In that
> case it makes a lot of sense to create a remote-tracking branch: when
> implicitly checking out a remote branch, it's likely the goal is to
> track it.
>
> The issue is that
>
>      git switch -c bar foo
>
> will do the same, despite explicitely creating a differently named
> branch, which is probably some sort of feature which needs to be
> remote-ed somewhere else. If this issue is not caught immediately it is
> possible to push directly upstream by mistake.
>
> Upon reading the documentation of `git switch` I actually believed this
> would behave correctly given `autoSetupMerge=false`:
>
>      --guess, --no-guess
>          If <branch> is not found but there does exist a tracking branch
> in exactly one remote (call it <remote>) with
>          a matching name, treat as equivalent to
>
>              $ git switch -c <branch> --track <remote>/<branch>
>
> Because `--guess` is the default for the `git switch <name>` form, this
> description made me believe the tracking would be forced.
>
> Sadly it is not so, setting `autoSetupMerge=false` will also disable
> automatic remote-tracking on guessed branch.
>
> As far as I'm concerned, `git switch` actually behaving as documented
> would resolve the entire issue (especially if it were possible to
> disable `git checkout` somehow, such that I would have to force muscle
> memory).
>
> This is made more annoying because
>
>      git switch -t foo
>
> *does not work*, frustratingly (if as documented, this time) `-t`
> implies `-c`. So it's not even possible to remember to type `git switch
> -t remotebranch` and then live happily with `autoSetupMerge=false`. This
> makes `autoSetupMerge=false` a lot more frustrating that necessary.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux