Re: [RFC/PATCH] Introduce remote.pushdefault
- From
Jeff King <peff@peff.net>
- Date
- Mar 17, 2013, 05:48 UTC
- Message-ID
- <20130317054803.GB16070@sigill.intra.peff.net>
- In-Reply-To
- <CALkWK0m2N=D47WJLk1F4j1GsGGWHyfxVF_WGXBbG3vyrfQ-oLA@mail.gmail.com>
On Sun, Mar 17, 2013 at 06:00:08AM +0530, Ramkumar Ramachandra wrote:
Show 25 quoted lines
> >> +remote.pushdefault:: > >> + The remote to push to by default. Overrides the > >> + branch-specific configuration `branch.<name>.remote`. > > > > It feels unexpected to see "I may have said while on this branch I > > push there and on that branch I push somewhere else, but no, with > > this single configuration I'm invalidating all these previous > > statements, and all pushes go to this new place". > > > > Shouldn't the default be the default that is to be overridden by > > other configuration that is more specific? That is, "I would > > normally push to this remote and unless I say otherwise that is all > > I have to say, but for this particular branch, I push to somehwere > > else". > > I'm a little confused as to where this configuration variable will be > useful. On a fresh clone from Github, I get branch.master.remote > configured to "origin". How will adding remote.pushdefault have any > impact, unless I explicitly remove this branch-specific remote > configuration? Besides, without branch.<name>.remote configured, I > can't even pull and expect changes to be merged. So, really: what is > the use of remote.pushdefault? > > I'm dropping this patch, and just going with branch.<name>.pushremote, > unless you convince me otherwise.
That is why I described the scheme I did in [1]. It uses the following two general rules:
1. Per-branch config trumps repo-wide config.
2. Push-specific config (e.g., "remote.pushdefault") trumps
non-specific config (e.g., "remote.default") for pushing.So the push lookup list is (in order of precedence):
1. branch.*.pushremote 2. remote.pushdefault 3. branch.*.remote 4. remote.default 5. origin
and it solves Junio's issue because the way to say "override my remote.pushdefault for this branch" is not to set "branch.*.remote", but to set "branch.*.pushremote".
-Peff
[1] http://article.gmane.org/gmane.comp.version-control.git/215751