Subject: Re: [RFC PATCH] git push: Push nothing if no refspecs are given or configured

From: Finn Arne Gangstad <[email-masked]>
Date: Fri, 6 Mar 2009 12:48:12 +0100

On Fri, Mar 06, 2009 at 02:32:53AM -0800, Junio C Hamano wrote:
> Johannes Schindelin <[email-masked]> writes:
> 
> > On Thu, 5 Mar 2009, Sverre Rabbelier wrote:
> >
> >> On Thu, Mar 5, 2009 at 23:25, Markus Heidelberg
> >> <[email-masked]> wrote:
> >> > Oh, I confused "config option" with "command line argument"...
> >> 
> >> Right, I'd like to be able to do:
> >> $ git config push.iamnotretarded true
> >> $ git push
> >
> > LOL!  Sverre, you have a way to crack me up...
> 
> I found it amusing, too.
> 
> It may have some correlation with how well organized your work habit is,
> but I do not think it has much correlation with being retarded.  It is
> more about "'matching refs' is the perfect default for _my_ use pattern,
> don't mess with it, please".

So here is my current WIP suggestion for a new "push.default"
variable, I am not sure if a single entry can express all useful
choices, or if it is a good idea to introduce more default choices
other than "nothing" (with the goal of making it the default in a
later release).

I think all the values here make sense as a --option to git push
though (except --nothing...)

Suggested new entry in config.txt:

push.default::
	Defines the action git push should take if no refspec is given
	on the command line, no refspec is configured in the branch, and
	no refspec is implied by any of the options given on the command
	line.
+
	The term `current remote` means the remote configured for the current
	branch, or `origin` if no remote is set. `origin` is also used if
	you are not on a branch at all.
+
* `nothing` do not push anything
* `matching` push all matching branches to the current remote.
  All branches having the same name in both ends are considered to be
  matching. This is the default value.
* `same-remote` push all matching branches that are configured to use
  the current remote. Branches with no remote configuration are not pushed.
* `tracked` push all branches that are tracking a branch on the current
  remote to their counterpart.

- Finn Arne