@@ -1884,6 +1884,10 @@ receive.updateserverinfo:: If set to true, git-receive-pack will run git-update-server-info after receiving data from git-push and updating refs.+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".
@@ -322,7 +322,7 @@ static int push_with_options(struct transport *transport, int flags)staticintdo_push(constchar*repo,intflags){inti,errs;-structremote*remote=remote_get(repo);+structremote*remote=pushremote_get(repo);constchar**url;inturl_nr;
Why is this no longer needed?
All the remainder of this function is about "remote.*" config and
this rejects other keys, like "user.name", etc.
I'm a bit confused....
name = key + 7;
if (*name == '/') {
warning("Config remote shorthand cannot begin with '/': %s",
@@ -1884,6 +1884,10 @@ receive.updateserverinfo:: If set to true, git-receive-pack will run git-update-server-info after receiving data from git-push and updating refs.+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".
Oops, I meant to have it overriden by branch-specific configuration. Fixed now.
@@ -322,7 +322,7 @@ static int push_with_options(struct transport *transport, int flags)staticintdo_push(constchar*repo,intflags){inti,errs;-structremote*remote=remote_get(repo);+structremote*remote=pushremote_get(repo);constchar**url;inturl_nr;
@@ -1884,6 +1884,10 @@ receive.updateserverinfo:: If set to true, git-receive-pack will run git-update-server-info after receiving data from git-push and updating refs.+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.
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
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".
Right, thanks for clearing that up Jeff. I'll re-roll with
remote.pushdefault overriding branch.<name>.remote.
Ram