git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: What does it mean to have multiple upstream tracking branches?

From
Tao Klerks <tao@klerks.biz>
Date
Mar 7, 2022, 06:17 UTC
Message-ID
<CAPMMpoh38fm-jNi=GD+uf6O+JLiJz-ue2zh5ceWpwmTYBRKzvw@mail.gmail.com>
In-Reply-To
<xmqqzgm2vjab.fsf@gitster.g>
On Sun, Mar 6, 2022 at 10:54 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 56 quoted lines
>
> Glen Choo <chooglen@google.com> writes:
>
> > Not that I would ever _recommend_ someone to work like this though.
> > Junio also wondered whether anyone uses this [1].
> >
> > [1] https://lore.kernel.org/git/xmqqbl2hw10h.fsf@gitster.g
>
> I actually think the current octopus behaviour is a sensible one
> (after all, that was what we envisioned how it would be used when we
> did the mechanism long time ago).  If you have mutliple, say source
> and docs, groups working for you and you are taking their work from
> time to time, something like this:
>
>     [branch "main"]
>         remote = central-repo
>         merge = sources
>         merge = docs
>
> would let your folks push into the central-repo, and a "git pull"
> will help you advance your main branch that you'll publish later.
>
> You can explain multiple .merge entries for such an integration
> branch like I just did and I think such an explanation makes perfect
> sense, but these are quite different from what we view as "upstream"
> in the traditional sense.  In the setting illustrated here, yours is
> the main integration repository, the center of the universe, and
> those folks working in the 'sources' and 'docs' groups view yours as
> their "upstream".
>
> So, "what does it mean to have multiple branch.*.merge entries" has
> a good answer: you are integrating from these contributors and these
> entries are not your "upstream" in the usual sense---you do not even
> push back to them.  Asking "what does it mean to have multiple
> upstream" makes little sense, I would think.
>
> Now, with the 'main' branch used in such a manner, if you did
>
>    $ git branch --track=inherit topic main
>
> and worked on the "topic" branch, you do not push back to either the
> sources or docs of the central-repo, of course, but it is unclear if
> you even want to "pull" to create octopus from these two branches at
> the central-repo, which essentially duplicates the pull's you would
> do on your 'main' branch.  I suspect that you'd rather want to merge
> updates 'main' accumulated (or rebase on them).
>
> The reason why I asked what Josh's plans are for the multiple .merge
> entries in that thread [1] when the "--inherit" feature was being
> invented was exactly about this point.  I wondered if last-one-wins
> may make sense (and as the above octopus set-up tells us, it may
> not), but if we want to keep "multiple .merge entries means an
> integrator making octpus merges", then it may make sense not to copy
> them when there are multiple with "--track=inherit", to avoid
> spreading the "curious" nature of the branch like 'main' depicted
> above.

Given that the notion of "inherit"ing the tracking configuration is a (relatively) new one anyway, and given the slightly esoteric nature of the "multiple branch merge entries lead to octopus merges" functionality, I would argue that it makes more sense to die when branching under this specific configuration, saying something like "inheriting the tracking configuration of a branch with multiple branch merge entries is not supported - we think you're making a mistake".

Skipping the creation of tracking entries in this case, even with a warning/explanation output to stdout, would be a "slightly hidden surprise", in that git command output is often not read by, or even visible to users when a command is successful, eg in a GUI.

If we think this will basically never happen and really makes no sense anyway, as Junio seems to suggest, then I would argue the extra complexity in the codebase to support the "inheriting multiple branch merge entries" is unwarranted.

Either way, I will happily drop this topic as it does not appear to require follow-up in direct relation to my "--track=simple" work/proposal. On the other hand, I'd be happy to work on a patch to eliminate this multi-tracking-branch-inheritance path/support (undoing some of Josh's work here) if the team believes this makes sense.

Previous: Junio C HamanoNext: Ævar Arnfjörð Bjarmason
Message 7 of 10 in “What does it mean to have multiple upstream tracking branches?”
  1. Tao KlerksMar 3, 2022
  2. Ævar Arnfjörð BjarmasonMar 3, 2022
  3. Glen ChooMar 3, 2022
  4. Ævar Arnfjörð BjarmasonMar 6, 2022
  5. Tao KlerksMar 7, 2022
  6. Junio C HamanoMar 6, 2022
  7. Tao KlerksMar 7, 2022
  8. Ævar Arnfjörð BjarmasonMar 7, 2022
  9. Josh SteadmonMar 8, 2022
  10. Tao KlerksMar 7, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.