Re: [RFC/PATCH] Introduce remote.pushdefault
From: Jeff King <hidden>
Date: 2016-06-15 22:56:25
On Sun, Mar 17, 2013 at 06:00:08AM +0530, Ramkumar Ramachandra wrote:
quoted
quoted
+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