git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: push.default: current vs upstream
Date: Fri, 6 Apr 2012 04:00:04 -0400	[thread overview]
Message-ID: <20120406080004.GA27940@sigill.intra.peff.net> (raw)
In-Reply-To: <vpqr4w12tjj.fsf@bauges.imag.fr>

On Fri, Apr 06, 2012 at 09:44:48AM +0200, Matthieu Moy wrote:

> I think exactly the opposite. Once you learnt about remote-tracking
> branches, about "git fetch" Vs "git pull", you understand why "git pull"
> and "git push" are not strictly speaking symmetrical operations.
> 
> But just from the wording, it should be obvious that the commands are
> doing something somehow symmetrical.

My mind may be warped from too much git and I may be misremembering my
early days, but I feel like I never considered "push" and "pull" to be
symmetric opposites. I dunno. We are both talking about some
hypothetical population of new users, and I'm not sure either of us has
hard data.

> > So shouldn't the advice for a non-fast-forward push be:
> >
> >    if $source_ref is currently checked out
> >            advise "git checkout $source_ref, and then..."
> >    fi
> >    if $dest_remote == branch.$source_ref.remote &&
> >       $dest_ref == branch.$source_ref.merge
> >            advise "git pull"
> >    else
> >            advise "git pull $dest_remote $dest_ref"
> >    fi
> >
> > That handles only one ref, of course. If you get multiple non-ff
> > failures, I'm not sure what we should advise.
> 
> The topic ct/advise-push-default does essentially that indeed.

I think it does the first half (recommend checkout if it was a non-HEAD). But
the "pull before push" message just says:

  Updates were rejected because the tip of your current branch is behind
  its remote counterpart. Merge the remote changes (e.g. 'git pull')
  before pushing again.

which is not exactly right. Saying "e.g." lets clueful people know that
the details of merging might be different, but I doubt that subtlety is
helpful for new users.

> > You wrote above that we'll have a hard time explaining how "git pull"
> > works. But I don't think so; if it hasn't been a problem with
> > "matching", then why would it with "current"?
> 
> I mis-spoke. I think I meant something like "if the assumption that
> explaining push -c push.current=upstream is hard, then we'll have a hard
> time explaining git pull".

That makes more sense to me.

> About safety, I don't think we can tell in general which bad push is the
> most serious. push.default=current may create branches unexpectedly,
> while push.default=upstream would ask you to "push --set-upstream" when
> creating the remote branch. push.default=upstream may push to the master
> when you wanted to create a remote topic branch. My feeling is that both
> are equally bad, but maybe I'm wrong here.

I would say without hesitation that fast-forwarding the upstream is more
likely to be disastrous than creating a new branch. However,
push.default=current can also fast-forward an existing branch (although
if you have a local "foo" and its upstream is _not_ the remote "foo", I
find it extremely unlikely that a remote "foo" also exists).

On the other hand, one thing we have not talked about is how one gets
into the "topic push fast-forwards master" situation. Which is running:

  $ git checkout -b topic origin/master

I'm not sure if that is something totally clueless people will run. And
maybe by the time people are intermediate enough git users to run that,
they will have figured out how upstream works. So maybe my concern is
overblown.  I consider the much more likely scenarios for a new user to
be:

  $ git clone ... && cd project
  $ hack hack hack
  $ git push

which will work with either "current" or "upstream", or:

  $ git clone ... && cd project
  $ git checkout foo ;# equivalent of "git checkout -b foo origin/foo"
  $ hack hack hack
  $ git push

which also works with both, or:

  $ git clone ... && cd project
  $ git checkout -b topic
  $ hack hack hack
  $ git push

which will error out for "upstream", and create a new branch "topic" on
the remote with "current".

-Peff

  reply	other threads:[~2012-04-06  8:00 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-28 19:47 [ANNOUNCE] Git 1.7.10-rc3 Junio C Hamano
2012-03-29  9:52 ` Jeff King
2012-03-29 21:22   ` Junio C Hamano
2012-03-29 22:11     ` Jeff King
2012-03-30  1:54       ` Junio C Hamano
2012-03-30  7:13         ` push.default: current vs upstream Jeff King
2012-03-30 20:25           ` Junio C Hamano
2012-03-30 21:01             ` Jeff King
2012-03-30 21:28               ` Junio C Hamano
2012-03-30 21:53                 ` Jeff King
2012-03-30 22:15                   ` Junio C Hamano
2012-03-30 22:20                     ` Jeff King
2012-03-30 23:12                       ` Junio C Hamano
2012-03-31 22:49               ` Nathan Gray
2012-03-31 23:48                 ` Seth Robertson
2012-04-01  2:22                   ` Junio C Hamano
2012-04-01  5:58                   ` Nathan Gray
2012-04-02  7:40             ` Matthieu Moy
2012-04-02 16:48               ` Junio C Hamano
2012-04-02 17:20                 ` Matthieu Moy
2012-04-02 18:40                   ` Junio C Hamano
2012-04-02 18:58                     ` Matthieu Moy
2012-04-02 19:47                       ` Junio C Hamano
2012-04-02 20:40                         ` Matthieu Moy
2012-04-02 20:50                           ` Junio C Hamano
2012-04-02 21:02                           ` demerphq
2012-04-02 21:16                             ` Matthieu Moy
2012-04-04  7:57                               ` demerphq
2012-04-05 13:13               ` Jeff King
2012-04-05 16:46                 ` Matthieu Moy
2012-04-06  7:15                   ` Jeff King
2012-04-06  7:44                     ` Matthieu Moy
2012-04-06  8:00                       ` Jeff King [this message]
2012-04-06 17:41                         ` Junio C Hamano
2012-04-06 18:01                         ` Jehan Bing
2012-04-07  7:49                         ` Michael Haggerty
2012-04-07  7:51                           ` Jeff King
2012-04-07  8:40                             ` Andrew Sayers
2012-04-12  7:11                               ` Jeff King
2012-04-12 15:04                                 ` Junio C Hamano
2012-04-12 21:16                                 ` Andrew Sayers
2012-04-12 21:33                                   ` Junio C Hamano
2012-04-12 22:11                                     ` Jeff King
2012-04-12 22:59                                       ` Philip Oakley
2012-04-13 19:31                                         ` Junio C Hamano
2012-04-17 20:13                                     ` Andrew Sayers
2012-04-08  4:43                             ` Junio C Hamano
2012-04-11 16:17                               ` Matthieu Moy
2012-04-11 16:44                                 ` Junio C Hamano
2012-04-12  7:55                                 ` Jeff King
2012-04-12  8:09                                   ` Matthieu Moy
2012-04-12  8:14                                     ` Jeff King
2012-04-12  8:59                                       ` Matthieu Moy
2012-04-12 15:56                                         ` Junio C Hamano
2012-04-19 16:06                                           ` Junio C Hamano
2012-04-19 20:38                                             ` Matthieu Moy
2012-04-19 21:02                                               ` Junio C Hamano
2012-04-19 22:57                                               ` [RFC/PATCH 0/3] push.default upcomming change Matthieu Moy
2012-04-19 22:57                                                 ` [PATCH 1/3] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-19 23:46                                                   ` Jeff King
2012-04-20 14:52                                                     ` Matthieu Moy
2012-04-20 14:59                                                       ` [PATCH 0/4 v2] push.default upcomming change Matthieu Moy
2012-04-20 14:59                                                         ` [PATCH 1/4] Documentation: explain push.default option a bit more Matthieu Moy
2012-04-20 20:13                                                           ` Jeff King
2012-04-20 21:28                                                             ` Junio C Hamano
2012-04-21  3:51                                                               ` Michael Haggerty
2012-04-21  4:08                                                                 ` Junio C Hamano
2012-04-21  5:01                                                                   ` Michael Haggerty
2012-04-21  5:42                                                                     ` Junio C Hamano
2012-04-20 14:59                                                         ` [PATCH 2/4] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-20 20:33                                                           ` Jeff King
2012-04-22 16:24                                                             ` Zbigniew Jędrzejewski-Szmek
2012-04-20 21:42                                                           ` Junio C Hamano
2012-04-23  8:38                                                             ` Matthieu Moy
2012-04-20 14:59                                                         ` [PATCH 3/4] t5570: use explicit push refspec Matthieu Moy
2012-04-20 14:59                                                         ` [PATCH 4/4] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-20 20:35                                                         ` [PATCH 0/4 v2] push.default upcomming change Jeff King
2012-04-22 11:05                                                           ` Matthieu Moy
2012-04-23  2:50                                                             ` Junio C Hamano
2012-04-23  8:37                                                         ` [PATCH 0/7 v3] " Matthieu Moy
2012-04-23  8:37                                                           ` [PATCH 1/7] Documentation: explain push.default option a bit more Matthieu Moy
2012-04-23 15:20                                                             ` Junio C Hamano
2012-04-23 19:00                                                             ` Philip Oakley
2012-04-23 19:11                                                               ` Junio C Hamano
2012-04-23 21:01                                                                 ` Philip Oakley
2012-04-23  8:37                                                           ` [PATCH 2/7] Undocument deprecated alias 'push.default=tracking' Matthieu Moy
2012-04-23 15:21                                                             ` Junio C Hamano
2013-01-31 17:10                                                             ` Ævar Arnfjörð Bjarmason
2013-01-31 17:35                                                               ` Junio C Hamano
2013-01-31 19:07                                                                 ` Jonathan Nieder
2013-01-31 19:11                                                                   ` Jonathan Nieder
2013-01-31 19:58                                                                     ` Junio C Hamano
2013-01-31 19:41                                                                   ` Junio C Hamano
2013-01-31 19:57                                                                     ` Jonathan Nieder
2013-01-31 20:01                                                                       ` Junio C Hamano
2013-01-31 20:11                                                                         ` Jonathan Nieder
2013-01-31 20:42                                                                           ` Junio C Hamano
2013-01-31 20:44                                                                             ` Junio C Hamano
2013-01-31 20:04                                                                     ` Jonathan Nieder
2013-01-31 20:08                                                                       ` Matthieu Moy
2013-01-31 20:21                                                                       ` Junio C Hamano
2013-01-31 20:50                                                                         ` Junio C Hamano
2013-01-31 21:00                                                                           ` Jonathan Nieder
2013-02-01  1:15                                                                             ` Junio C Hamano
2013-01-31 21:08                                                                         ` Jonathan Nieder
2013-01-31 20:41                                                                       ` Philip Oakley
2012-04-23  8:38                                                           ` [PATCH 3/7] t5528-push-default.sh: add helper functions Matthieu Moy
2012-04-23 15:36                                                             ` Junio C Hamano
2012-04-23 16:02                                                               ` Matthieu Moy
2012-04-23 16:16                                                                 ` Junio C Hamano
2012-04-23 16:20                                                                   ` Matthieu Moy
2012-04-23 16:57                                                                     ` Matthieu Moy
2012-04-23 17:09                                                                       ` Junio C Hamano
2012-04-23 16:42                                                                   ` Junio C Hamano
2012-04-23 16:45                                                                     ` [PATCH 2/3] fixup! " Junio C Hamano
2012-04-23 16:48                                                                     ` [PATCH 3/3] push: suggested updates to push configuration documentation Junio C Hamano
2012-04-23  8:38                                                           ` [PATCH 4/7] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-23 10:32                                                             ` Michael Haggerty
2012-04-23 11:20                                                               ` Matthieu Moy
2012-04-23 15:52                                                             ` Junio C Hamano
2012-04-23 16:09                                                               ` Matthieu Moy
2012-04-23  8:38                                                           ` [PATCH 5/7] t5570: use explicit push refspec Matthieu Moy
2012-04-23  8:38                                                           ` [PATCH 6/7] push: document the future default change for push.default (matching -> simple) Matthieu Moy
2012-04-23  8:38                                                           ` [PATCH 7/7] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-24  7:49                                                           ` [PATCH 0/7 v4] push.default upcomming change Matthieu Moy
2012-04-24  7:50                                                             ` [PATCH 1/7] Documentation: explain push.default option a bit more Matthieu Moy
2012-04-24  7:50                                                             ` [PATCH 2/7] Undocument deprecated alias 'push.default=tracking' Matthieu Moy
2012-04-24  7:50                                                             ` [PATCH 3/7] t5528-push-default.sh: add helper functions Matthieu Moy
2012-04-24  7:50                                                             ` [PATCH 4/7] push: introduce new push.default mode "simple" Matthieu Moy
2012-04-25  1:53                                                               ` Junio C Hamano
2012-04-25 11:01                                                                 ` Matthieu Moy
2012-04-24  7:50                                                             ` [PATCH 5/7] t5570: use explicit push refspec Matthieu Moy
2012-04-24  7:50                                                             ` [PATCH 6/7] push: document the future default change for push.default (matching -> simple) Matthieu Moy
2012-04-24  7:50                                                             ` [PATCH 7/7] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-24 19:28                                                             ` [PATCH 0/7 v4] push.default upcomming change Junio C Hamano
2012-04-19 22:57                                                 ` [PATCH 2/3] t5570: use explicit push refspec Matthieu Moy
2012-04-19 22:57                                                 ` [PATCH 3/3] push: start warning upcoming default change for push.default Matthieu Moy
2012-04-26  5:44                                                   ` [PATCH] t5541: warning message is given even with --quiet Junio C Hamano
2012-04-26  6:31                                                     ` Matthieu Moy
2012-04-11  2:08                     ` [RFC/PATCH] Give better 'pull' advice when pushing non-ff updates to current branch Christopher Tiwald
2012-04-06 11:38                   ` push.default: current vs upstream Dmitry Potapov
2012-04-06 13:36                     ` demerphq
2012-04-06 18:03                       ` Dmitry Potapov
2012-04-06 18:48                         ` demerphq
2012-04-06 19:38                           ` Dmitry Potapov
2012-03-30 23:07           ` Junio C Hamano
2012-04-03 20:59             ` Jeff King
2012-04-03 21:04               ` Jeff King
2012-04-03 22:29               ` Junio C Hamano
2012-04-03 23:23                 ` Junio C Hamano
2012-04-05 12:45                 ` Jeff King
2012-04-08 12:52           ` Felipe Contreras

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120406080004.GA27940@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).