git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/6] push: change `simple` to accommodate triangular workflows

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 24, 2013, 07:43 UTC
Message-ID
<7v38s8dkd8.fsf@alter.siamese.dyndns.org>
In-Reply-To
<CALKQrgfAT9GhD-_tZHr9wRA6R6g7ttDWTsmUQXdWUhG-gwNBqQ@mail.gmail.com>
Johan Herland <johan@herland.net> writes:
Show 8 quoted lines
>> +static void setup_push_current(struct remote *remote, struct branch *branch)
>> +{
>> +       if (!branch)
>> +               die(_(message_detached_head_die), remote->name);
>> +       add_refspec(branch->name);
>
> Here (and above) we add a refspec to tell Git exactly what to push
> from the local end, and into what on the remote end.
Correct.
> Is it possible to end up with multiple simultaneous refspecs
> matching the same local ref, but mapping to different remote refs?

Sorry, I don't follow. If you say "push.default = current" and you do not give any other stronger clue (e.g. "git push origin master" on the command line, or "git push [origin]" with remote.origin.push configured), the above function is called and sets up your current branch to be pushed to the same.

It is a bit more interesting for "push.default = upstream", which is for centralized workflow. If you forked frotz and nitfol branches both from their master, e.g.

	$ git checkout -t -b frotz origin/master
	$ git checkout -t -b nitfol origin/master

after having worked on one of the branches, when you want to push it back, the result of working on the topic branch goes back to master, but I think that is what you want in the centralized workflow. If it fast-forwards, you are fine, and if it does not, you will fetch your upstream, i.e. their master, integrate your work with it, and then push it back. At that point, you are playing the role of the integrator of the shared master branch, because what you do on your topic branch when you integrate others' work from master is exactly that---you are not perfecting the theme you wanted to achieve on your topic branch, but are integrating that result into shared master to advance the overall state of the project. So pushing the result back to 'master' makes perfect sense. After that, when you have to restart your work on the other branch, you may first "pull --rebase" before continuing, or you may just keep going with your work based on a tad old origin/master. But when you finish working on that topic and are about to push it out, you would be doing the same "tentatively don the central integrator's hat", and again it makes sense to push the result to 'master'.

So in that sense, it is not "which one wins". It is more like "you can push only after you become up to date, so there isn't one branch overwriting the other one."

That is how I view it, anyway.
 cf. http://git-blame.blogspot.com/2013/06/fun-with-various-workflows-1.html
>> +static int is_workflow_triagular(struct remote *remote)
>
> s/triagular/triangular/
Thanks.
Show 7 quoted lines
>
>> +{
>> +       struct remote *fetch_remote = remote_get(NULL);
>> +       return (fetch_remote && fetch_remote != remote);
>
> This changed from a strcmp() to a pointer compare. That might be safe,
> depending on the sources of the two struct remote *, but I'm not sure.
Given the way remote_get() works, it should be correct, I think.
Previous: Johan HerlandNext: Ramkumar Ramachandra
Message 6 of 36 in “Reroll of rr/triangular-push-fix”
  1. 0/6 Reroll of rr/triangular-push-fixJunio C Hamano, Jun 24, 2013
  2. 1/6 t/t5528-push-default: remove redundant test_config linesJunio C Hamano, Jun 24, 2013
  3. 2/6 config doc: rewrite push.default sectionJunio C Hamano, Jun 24, 2013
  4. 3/6 push: change `simple` to accommodate triangular workflowsJunio C Hamano, Jun 24, 2013
  5. Johan HerlandJun 24, 2013
  6. Junio C HamanoJun 24, 2013
  7. Ramkumar RamachandraJun 24, 2013
  8. Johan HerlandJun 24, 2013
  9. Ramkumar RamachandraJun 24, 2013
  10. Junio C HamanoJun 24, 2013
  11. Johan HerlandJun 24, 2013
  12. 4/6 t/t5528-push-default: generalize test_push_*Junio C Hamano, Jun 24, 2013
  13. Johan HerlandJun 24, 2013
  14. Junio C HamanoJun 24, 2013
  15. Johan HerlandJun 24, 2013
  16. Eric SunshineJun 24, 2013
  17. Johan HerlandJun 24, 2013
  18. Junio C HamanoJun 24, 2013
  19. 5/6 t/t5528-push-default: test pushdefault workflowsJunio C Hamano, Jun 24, 2013
  20. 6/6 push: honor branch.*.pushJunio C Hamano, Jun 24, 2013
  21. Johan HerlandJun 24, 2013
  22. Junio C HamanoJun 24, 2013
  23. Ramkumar RamachandraJun 24, 2013
  24. Junio C HamanoJun 24, 2013
  25. Ramkumar RamachandraJun 24, 2013
  26. Johan HerlandJun 24, 2013
  27. Junio C HamanoJun 24, 2013
  28. Junio C HamanoJun 24, 2013
  29. Ramkumar RamachandraJun 24, 2013
  30. Junio C HamanoJun 24, 2013
  31. Ramkumar RamachandraJun 24, 2013
  32. Junio C HamanoJun 24, 2013
  33. Ramkumar RamachandraJun 24, 2013
  34. Ramkumar RamachandraJun 24, 2013
  35. Junio C HamanoJun 24, 2013
  36. Ramkumar RamachandraJun 24, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.