Re: [PATCH 3/6] push: change `simple` to accommodate triangular workflows
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:57:51
Ramkumar Ramachandra [off-list ref] writes:
Junio C Hamano wrote:quoted
quoted
They're not the same thing. It is very much intentional and intended: the safety net is not to "ensure that the push and pull are symmetrical" (i.e. among other things, error out if branch.$branch.merge is unset), but rather "ensure that the push and pull are never asymmetrical".not to "ensure that the push and pull are symmetrical" rather "ensure that the push and pull are never asymmetrical". They still talk the same thing to me. What am I missing?Never mind the wording then. I am proposing preventing asymmetry by explicitly disallowing a push when $branch is different from branch.$branch.merge, instead of shutting down immediately when branch.$branch.merge is unset.
We always said "upstream is to update the branch you fetch and integrate with", and tried to make sure the push destination is the branch you configured the current branch (i.e. the one you are trying to push out) to fetch and integrate with. That is how we prevent asymmetry. We fail if branch.$branch.merge is set to something else. We also fail if branch.$branch.merge is *not* set, because by definition the branch you are trying to push to in that scenario cannot be the branch you fetch and integrat with by "git pull [--rebase]". I know your patch was attempting to change the behaviour for the latter. You are trying to let anything go if branch.*.merge is not set. How would it help prevent assymetry?
quoted
quoted
Now I'd like to question what you are labelling as "safety". What is the consequence of erroring out when branch.$branch.merge is unset when pushing using `upstream`?Nothing noteworthy. I wasn't suggesting to change what `upstream` does at all.No, but I did....
Really? Then where did this come from?
I didn't want to contaminate this series with an unrelated improvement to `upstream`
quoted
If you are using a centralized workflow, and if a branch does not have branch.*.merge configured, we do not know to which branch you are pushing it back, so we error out.And I said: have a sane default.
Like you said, I do not want to contaminate this series with such an unrelated change. Worse, you are trying to break a sane default by replacing it with "anything goes". We already have a sane default, which is to error out. We do not need your broken default.