Subject: Re: Documentation about "push.default=upstream" is confusing

From: Junio C Hamano <[email-masked]>
Date: Mon, 10 Feb 2014 11:06:00 -0800

Ingo Rohloff <[email-masked]> writes:

> To handle that I setup several remote tracking branches called:
>   repo1_master   (tracks repo1/master)
>   repo2_master   (tracks repo2/master)
>   reap3_master   (tracks repo3/master)
>
> Now without "push.default=upstream" I would have to either always explicitly
> do something like:
>   git push repo1 repo1_master:master
>   git push repo2 repo2_master:master

If you think about your interaction with people who are only looking
at "repo1" alone, you _are_ using a centralized workflow.  You are
not the only one who update their 'master'; other people push there
to update that 'master' and you pull it in to keep you up to date
and further build your changes on top.  Such an interaction with
other people by using repo1 as the shared meeting point is well
served by the push-to-upstream mechanism, and that kind of
interaction is called "centralized workflow".  The illustration from
you is running one centralized workflow with each of the three
repositories.

The de-centralized workflow the message hints (but does not talk
about) is different.  It is not uncommon to pull from one place and
then to push the result out to your own publishing branch
(e.g. clone from anna, fetch to keep up to date with her, work on
it, publish to your repository to tell her to fetch from you), and
push-to-upstream is not very well suited for that topology.  You may
clone her "for-bob" branch, but you do not push it back to her
repository to update her "for-bob" branch.