Re: branch.autoSetupMerge option for "if name matches only"?
- From
Xavier Morel <xmo@odoo.com>
- Date
- Feb 9, 2022, 13:46 UTC
- Message-ID
- <b54a6cde-5065-632b-012c-0d6f777249ef@odoo.com>
- In-Reply-To
- <CAPMMpog6vKBfYEWqKDgK7YQQ96pPVMH7hYPXUHMnJsgLNgYMXA@mail.gmail.com>
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.