From: Ben Boeckel <mathstuf@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, "Martin Ågren" <martin.agren@gmail.com>,
"Jeff King" <peff@peff.net>,
"Jeff Hostetler" <jeffhost@microsoft.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Taylor Blau" <me@ttaylorr.com>
Subject: Re: [PATCH 1/1] config: support setting up a remote tracking branch upon creation
Date: Wed, 28 Jul 2021 14:26:17 -0400 [thread overview]
Message-ID: <YQGhSTc9NoB4xEGA@erythro.dev.benboeckel.internal> (raw)
In-Reply-To: <xmqqim0u9vnb.fsf@gitster.g>
On Wed, Jul 28, 2021 at 10:48:56 -0700, Junio C Hamano wrote:
> Ben Boeckel <mathstuf@gmail.com> writes:
>
> > The `branch.autoSetupMerge` works well for setting up tracking a local
> > branch, but there is no mechanism to automatically set up a remote
> > tracking situation.
>
> This description is probably insufficient to explain what's missing,
> probably because "set up a remote tracking situation" is a bit
> fuzzy.
Fair enough. I finally understood what was going on with "tracking" only
recently. Usually I would track the remote's branch of the same name,
but I found that "tracking" `origin/master` instead of `myfork/topic`
makes `fugitive` render the following:
- commits on my topic that aren't integrated (this makes it easy to
tell it to "amend this commit" using its keybinding;
- commits on `master` that aren't on my topic (so I can see if there's
anything relevant to rebase on top of); and
- diffs against my fork's branch (as last fetched) so that I can see
the status.
Maybe this is a tooling issue, but I saw this as a potential way to
avoid having to specify this information on every topic I create.
> Without this patch, I can do this already:
>
> $ git checkout -t -b topic origin/topic
I should note that the *vast* majority of my development is done using
the fork-based workflow. I have `remote.pushDefault` set to my fork and
I use `push.default = simple` (there are only a handful of repositories
where "my fork" is also `origin` and I have, on multiple occasions,
wanted to make forks even there).
My normal pattern is that I'm on the target branch already, so I have:
$ git checkout -b topic
which doesn't do any tracking. Just `-t` makes it track my *local*
`master` when I really want it to track `origin/master`. AFAIK, there's
no shortcut for this other than to give the full `-t origin/master` at
branch creation time (and as something I do all the time).
> And after the above, we have
>
> [branch "topic"]
> remote = origin
> merge = refs/heads/topic
>
> Of course, you can instead use a short-hand DWIM, e.g.
>
> $ git checkout topic ;# assuming origin/topic exists
>
> gives us the same thing. In either case, topic knows to integrate
> with the 'topic' branch from remote 'origin' and push back there.
This doesn't match with my usual experience in fork-based workflows. I
want the topic to track `master` and then my `remote.pushDefault` makes
sure it goes to "the right place" when pushing.
> So instead of saying "there is no mechanism to ...", be a bit more
> specific what you can and cannot do in this first paragraph.
>
> Then we can describe the solution we'd propose in the second and
> subsequent paragraphs.
>
> Thanks.
I'll work on an improved cover letter to give more background.
> > +branch.defaultRemote::
> > + When a new branch is created with 'git branch', 'git switch' or 'git
> > + checkout', this value will be used to initialize the
> > + "branch.<name>.remote" setting.
>
> You mean without "-t"? I offhand do not think of a reason why this
> is a good idea. How would one create local topic branches that you
> plan to merge locally into your own larger topic branch to be shared
> with others? Shouldn't there be an easy way to countermand the
> setting by this configuration?
Everything goes through merge requests for the projects I work on
day-to-day (even contributions to "my own" projects due to CI
workflows). I added a test that `--no-track` works for this case (which
given its rarity for me is the right tradeoff at least).
> > +branch.defaultPushRemote::
> > + When a new branch is created with 'git branch', 'git switch' or 'git
> > + checkout', this value will be used to initialize the
> > + "branch.<name>.pushRemote" setting.
>
> Ditto.
>
> > +branch.defaultMerge::
> > + When a new branch is created with 'git branch', 'git switch' or 'git
> > + checkout', this value will be used to initialize the
> > + "branch.<name>.merge" setting.
>
> So the expected use case is to fork multiple local branches, to
> integrate with the same branch from the remote? I think we can
> already do
>
> $ git checkout -t -b xyzzy origin/master
> $ git checkout -t -b frotz origin/master
>
> and you can lose -t with branch.autosetupmerge setting. As the "git
> branch" command needs to get the name of your branch (e.g. 'xyzzy'
> or 'frotz') and which remote tracking branch you start from
> (e.g. 'origin/master'), even with branch.{defaultRemote,defaultMerge}
> configuration, you wouldn't lose that many keystrokes, I suspect.
There are times that I want to branch from HEAD, but track `master` (for
example, a branch destined for backporting to an older branch). The
equivalent of:
$ git checkout release
$ git checkout -b backported-branch
$ git branch --set-upstream-to=origin/master
> Or do you plan to make
>
> $ git branch xyzzy
>
> a short-hand for
>
> $ git branch -t xyzzy origin/master
>
> when defaultRemote and defaultMerge are set to 'origin' and
> 'refs/heads/master'? It would be way too confusing to start the
> new branch from origin/master in such a case, as everybody learned
> that "git branch xyzzy" that does not say where the branch initially
> points at uses HEAD.
No, it would just *track* `origin/master`, not branch from it. It should
be shorthand for:
$ git branch xyzzy
$ git branch --set-upstream-to=origin/master xyzzy
Though I personally use `git checkout -b` far more often to create
branches. And since "every" branch I make would have `-t origin/master`,
I wanted to have configuration to do this part for me.
Hopefully this gives a clearer picture of where I'm coming from.
Thanks,
--Ben
next prev parent reply other threads:[~2021-07-28 18:26 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-28 13:50 [PATCH 0/1] Improve automatic setup of tracking for new branches Ben Boeckel
2021-07-28 13:50 ` [PATCH 1/1] config: support setting up a remote tracking branch upon creation Ben Boeckel
2021-07-28 17:48 ` Junio C Hamano
2021-07-28 18:26 ` Ben Boeckel [this message]
2021-07-28 18:39 ` Junio C Hamano
2021-07-29 2:01 ` [PATCH 0/1] Improve automatic setup of tracking for new branches Ben Boeckel
2021-07-29 2:01 ` [PATCH 1/1] config: support a default remote tracking setup upon branch creation Ben Boeckel
2021-07-30 13:35 ` Philippe Blain
2021-07-30 14:07 ` Ben Boeckel
2021-07-30 17:32 ` Junio C Hamano
2021-08-02 13:02 ` Ævar Arnfjörð Bjarmason
2021-08-02 13:16 ` Ben Boeckel
2021-08-02 15:20 ` Ævar Arnfjörð Bjarmason
2021-07-30 1:04 ` [PATCH 0/1] Improve automatic setup of tracking for new branches Junio C Hamano
2021-07-30 1:33 ` Ben Boeckel
2021-07-30 13:35 ` Philippe Blain
2021-07-30 13:57 ` Ben Boeckel
2021-07-30 16:01 ` Philippe Blain
2021-07-30 17:45 ` Ben Boeckel
2021-08-02 21:17 ` Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YQGhSTc9NoB4xEGA@erythro.dev.benboeckel.internal \
--to=mathstuf@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jeffhost@microsoft.com \
--cc=martin.agren@gmail.com \
--cc=me@ttaylorr.com \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.