Re: [PATCH 1/1] config: support a default remote tracking setup upon branch creation
From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-08-02 15:36:49
On Mon, Aug 02 2021, Ben Boeckel wrote:
On Mon, Aug 02, 2021 at 15:02:41 +0200, Ævar Arnfjörð Bjarmason wrote:quoted
On Wed, Jul 28 2021, Ben Boeckel wrote:quoted
The `branch.autoSetupMerge` works well today for setting up tracking a local branch, but there is no easy mechanism to automatically set up a remote tracking situation for workflows which use a single set of branches for integration without specifying `--track` to every branch creation command or branching directly from the remote ref. This patch adds the following configuration values: - `branch.defaultRemote`: initializes `branch.<name>.remote` if not otherwise given; - `branch.defaultMerge`: initializes `branch.<name>.merge` if not otherwise given.Not a new issue per-se, but what if you've got a branch called defaultRemote? It seems to me that any new branch.<name>.* config closes the door for a <name> we squat on.It doesn't seem that shadowing is actually a thing: % git init Initialized empty Git repository in …/git-shadow/.git/ % git config foo.bar true % git config foo.bar.baz true % git config --get foo.bar true % git config --get foo.bar.baz true
You're right, I was misrecalling (or mis-imagining) some edge case there that doesn't exist. I also tested setting branch.defaultRemote=true and moving a branch.defaultRemote.* branch with "git branch -m", but it also does the right thing. Nevermind.
quoted
Given that we have checkout.defaultRemote and this also affects switch/checkout it seems better to continue in the checkout.* namespace even if it wasn't for that, but given the config squatting issue especially so.... For what it's worth I usually use the checkout.defaultRemote option (which I added) and: git checkout master && git branch -m master <topic-name> See 8d7b558baeb (checkout & worktree: introduce checkout.defaultRemote, 2018-06-05). It seems to me from that patch diff that you could modify some docs / tests for this, no? E.g. how it interacts with git-worktree.I think it would be weird for `checkout.*` to affect `git branch` which does no checkout at all. I want it to set up for simple branch creation as well, so this would be a hole in my use case.
*nod*, although your approach has the opposite problem of making branch creation with "checkout" and "switch" (and presumably "worktree") impacted by "branch.*' config. In a way that's more sensible, in that we can imagine those commands calling "git branch" under the hood (which msotly doesn't actually happen, except I think in the worktree case, but it's the same underlying APIs). ..
quoted
I like this direction, but just have a concern that this is a place where we need to consider all the UX in the area overall, and that any options/config don't overtly interact in a bad way.I'll have to look at adding test cases as to how it interacts with `checkout.defaultRemote`. Thanks,
....right, none of that mess is a showstopper, I'm just prodding you to look at if any of those edge cases are made better/worse by these additions. Thanks!