Re: [ITCH] Specify refspec without remote
From: Jeff King <hidden>
Date: 2016-06-15 22:56:46
On Thu, Apr 11, 2013 at 01:23:57AM +0530, Ramkumar Ramachandra wrote:
Ramkumar Ramachandra wrote:quoted
git push -- master next; pushes to my current branch's branch.<name>.pushremote? Isn't that a disaster?Actually, branch.<name>.pushremote already breaks the current design in a way, as Junio pointed out in a different email: a push.default set to anything except "current" is already nonsensical. Why should "matching" branches be pushed to the remote that my current branch specifies? That might well have their own branch.<name>.pushremote configured, which should be respected.
I'm not sure that it should be respected. "master" is short for "refs/heads/master:refs/heads/master", and does not mean "push master to where I have it configured to go" at all. That may be what the user means, but changing how "git push" works is going to create inconsistency with other cases.
We should fix this now. I think the fault lies in the rather old design of push.default. Do you have any suggestions as what would make sense here? Ultimately, I think a git push; needs to pick remotes for each refspec separately. The orthogonal design is definitely not right in my opinion.
Right, the example above might include multiple remotes if pushremote is respected. Or it might not come up with an answer at all for a tag. If you do: git push -- v1.2.3 master where does v1.2.3 go? To remote.pushdefault? That seems simple and consistent, as there is no ref-specific pushremote defined. But I'd guess that the user probably _wanted_ it to go to branch.master.pushremote.
As the author of branch.<name>.pushremote, I apologize for not having caught this earlier. I've been using push.default = current for a long time, and don't often think about the other settings.
I don't think pushremote introduced the problem. It is much older than that, and dates back to respecting branch.*.remote at all for pushes, even though push.default=matching (and before we had push.default, it was always matching) does not have anything to do with the current branch. -Peff