Re: [PATCH v2] doc: add triangular workflow
ALBERTIN TIMOTHEE p1514771 writes: +This workflow is commonly used on different platforms like BitBucket, +GitHub or GitLab which provide a dedicated mechanism for requesting merges. >>> >>> As a user, I find it terribly frustrating when reading documentation >>> telling me that "there's a dedicated mechanism" for something without >>> telling me actually how to do it. > >>Also I think the description is backwards from end-user's point of >>view. It's not that it is common to use the workflow on these >>hosting sites. It's more like people use the workflow and adopt use >>of these hosting sites as one building block of the workflow. > > I'm wondering if this sentence is really useful. It's not essential > and it will take lot of time and space to talk about it properly. > So, if you agree, we'll erase it. I think it is useful. My guess is that most people don't know the wording "triangular workflow", but most people know about GitHub for example. See e.g. https://trends.google.com/trends/explore?q=%22triangular%20workflow%22,github,gitlab,bitbucket So the hope here is that the reader reading this feels "Ah, OK, this is about how to do pull-requests on GitHub". OTOH, I wouldn't like a Git official documentation to be biaised towards a single hosting site. > In the case of a triangular workflow, if the project already exists, > PUBLISH will already exist too. No. If the project already exists, then UPSTREAM exists, and the contributor will create his or her own PUBLISH. There's generally two ways to do it: * On platforms supporting this, use the platform's mechanism to create a fork (e.g. fork button on GitHub/GitLab's web UI). * One can create an empty PUBLISH, clone UPSTREAM, and push to PUBLISH. -- Matthieu Moy https://matthieu-moy.fr/
Re: [PATCH v2] doc: add triangular workflow
ALBERTIN TIMOTHEE p1514771 writes: >>> +Example with master as : >>> +=== >>> +* `git config branch.master.remote upstream` >>> +* `git config branch.master.pushRemote origin` >>> +=== > >>origin is the remote you've cloned from. From the text above, I guess >>you meant it to point to PUBLISH. But all the examples "git clone" you >>gave are from UPSTREAM. > >>You're mixing the case where one "git clone"s from UPSTREAM and "git >>remode add"s PUBLISH, and the converse. Both are possible, but the >>"origin" remote will be different depending on which one you chose. > > I think I don't really get it. IMHO UPSTREAM is name from the repository > you pull from and PUBLISH from the repositiry you push to. In your document, you're suggesting to clone from ORIGIN, and then to set pushRemote to origin. This means "git push" will push to ORIGIN, which doesn't work. Actually, if one follows your instructions, upstream and origin will point to the same remote. Did you test your own document on a real-life example? If not, you should do so before anything else. You should notice this kind of issues before asking for external review. -- Matthieu Moy https://matthieu-moy.fr/
RE: [PATCH v2] doc: add triangular workflow
>>> +This workflow is commonly used on different platforms like BitBucket, >>> +GitHub or GitLab which provide a dedicated mechanism for requesting merges. >> >> As a user, I find it terribly frustrating when reading documentation >> telling me that "there's a dedicated mechanism" for something without >> telling me actually how to do it. >Also I think the description is backwards from end-user's point of >view. It's not that it is common to use the workflow on these >hosting sites. It's more like people use the workflow and adopt use >of these hosting sites as one building block of the workflow. I'm wondering if this sentence is really useful. It's not essential and it will take lot of time and space to talk about it properly. So, if you agree, we'll erase it. >>> +If **PUBLISH** doesn't exist, a contributor can publish his own repository. >>> +**PUBLISH** contains modifications before integration. >I am not sure what this really means. Isn't it the norm to create a >place to publish your work (and only your work) for your own use? >IOW, the above two lines solicit questions like "So... what happens >when publish does already exist??? and where does that publish >repository come from???" In the case of a triangular workflow, if the project already exists, PUBLISH will already exist too. However, if the project doesn't exist it is at the creator charge to create it. In fact, we just explain how doing it if the project already exist. We'll add it for the second case. BTW, the line : * `git push` is useless. Thank you for the review Timothée Albertin
RE: [PATCH v2] doc: add triangular workflow
>> + >> + >> +-- - >> +| UPSTREAM | maintainer | PUBLISH | >> +||- - - - - - - -| | >> +-- <- - >> + \ / >> + \ / >> +fetch | \ / ^ push >> + v \ / | >> + \ / >> + - >> + | LOCAL | >> + - >This kind of diagram deserves a bit of text to explain the situation. >For example, LOCAL is local only for the contributor (the maintainer >doesn't need to know about it for example). I'd add a sentence to >explain that this gives the overall view on the flow, from the point >of view of a contributor. Ok, we'll do that >> +* `git push` >This will push to UPSTREAM, right? Yes, we will specify it. >> +Adding **UPSTREAM** remote: >> + >> +=== >> +`git remote add upstream ` >> +=== >In which circumstance shall one write this? If you don't say it, the >reader will probably assume that this is to be done after the commands >you specified right above. But then: it doesn't make sense. You've >just cloned from UPSTREAM, you already have the UPSTREAM remote. Indeed, we just remove it. >> +For each branch requiring a triangular workflow, set >> +`branch..remote` and `branch..pushRemote` to set up >> +the **UPSTREAM** and **PUBLISH** repositories. >This neither tells me how to set the variables, nor what the effect >will be ("set up"?). We'll fix that in the next patch. >> +Example with master as : >> +=== >> +* `git config branch.master.remote upstream` >> +* `git config branch.master.pushRemote origin` >> +=== >origin is the remote you've cloned from. From the text above, I guess >you meant it to point to PUBLISH. But all the examples "git clone" you >gave are from UPSTREAM. >You're mixing the case where one "git clone"s from UPSTREAM and "git >remode add"s PUBLISH, and the converse. Both are possible, but the >"origin" remote will be different depending on which one you chose. I think I don't really get it. IMHO UPSTREAM is name from the repository you pull from and PUBLISH from the repositiry you push to. >> +Making your work available >> +~~ >> + >> +The `git push` command sends commits to the **PUBLISH** repository and not >> to >> +the **UPSTREAM** thanks to the configuration you did earlier with the >> +`git config remote.pushdefault origin` command. >This explanation should be next to the place where you recommend >setting remote.pushdefault. Done. >> +When a contributor pushes something, the `git config push.default >> +current` command can be used to specify that the name of the >> +**PUBLISH** branch is the same as the name of the **LOCAL** one. >I already said it multiple times, but I don't think it's a good idea >to recommend changing push.default. The default, "simple", was >specifically designed to be appropriate for triangular workflow: >http://git.661346.n2.nabble.com/PATCH-0-6-push-default-in-the-triangular-world-td7589907.html >(PATCH 3/6 in particular) >You may disagree with me, but then please explain your motivation (by >replying to my messages and/or by explaining the rationale in the >commit message). I read this discussion and so I understand the point here. I agree we shouldn't recommend this. >> += >> +`git rev-parse --abbrev-ref @{push}` >> += >> + >> +.Display the fetch remote's name: >> +[caption="Recipe: "] >> + >> +=== >> +`git rev-parse --abbrev-ref @{upstream}` >> +=== >I don't think "rev-parse" is the best example to give. >I use @{upstream} all the time to see what commits I have which aren't >in upstream yet: >git log @{upstream}.. git log seems a better exemple. We are ok we the rest of the review Thank you for your time Timothée Albertin
Re: [PATCH v2] doc: add triangular workflow
Matthieu Moy writes: > I don't think you should talk about "Git contributors", which can be > read as "contributors to the git.git codebase". "Git users" would make > more sense, or perhaps you meant "contributors to Git projects". But > actually, I don't think this kind of documentation should focus only > on new users. I think many reasonably advanced Git users do not know > about remote.pushdefault for example. Thanks for a careful review. >> diff --git a/Documentation/Makefile b/Documentation/Makefile >> index 2ab6556..c3e98c7 100644 >> --- a/Documentation/Makefile >> +++ b/Documentation/Makefile >> @@ -10,6 +10,7 @@ OBSOLETE_HTML = >> MAN1_TXT += $(filter-out \ >> $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \ >> $(wildcard git-*.txt)) >> +MAN1_TXT += git-triangular-workflow.txt > > git-*.txt is reserved for actual Git commands. Other tutorials use > git*.txt (e.g. we have gitworkflows.txt and not git-workflows.txt). Yeah, it probably is worth mentioning that MAN1 is for commands. Unless we have "git triangular-workflow" subcommand, this shouldn't be listed on MAN1_TXT list. Perhaps in MAN7 next to tutorial and workflow would be a better place. >> +This workflow is commonly used on different platforms like BitBucket, >> +GitHub or GitLab which provide a dedicated mechanism for requesting merges. > > As a user, I find it terribly frustrating when reading documentation > telling me that "there's a dedicated mechanism" for something without > telling me actually how to do it. Also I think the description is backwards from end-user's point of view. It's not that it is common to use the workflow on these hosting sites. It's more like people use the workflow and adopt use of these hosting sites as one building block of the workflow. >> +In a triangular workflow the rest of the community or the company >> +can review the code before it's in production. Everyone can read on >> +**PUBLISH** so everyone can review code before the maintainer merge >> +it to **UPSTREAM**. In a free software, anyone can >> +propose code. Reviewers accept the code when everyone agree >> +with it. The above hints that the workflow covers wide range of development circles from open source to proprietary, but the description in this paragraph does not seem to show how the workflow achieves that goal very well. Not all environment allow "everyone" to read "publish" (it is common to see siloed source repositories in commercial settings), and not all projects require unanimous agreement for inclusion. Also, "anyone can propose code" may be true for any project, not limited to "free" ones, as long as the code to base your changes on is available, but if the project would not take external contributions, being able to "propose" alone does not mean that much to the proposer. >> +If **PUBLISH** doesn't exist, a contributor can publish his own repository. >> +**PUBLISH** contains modifications before integration. I am not sure what this really means. Isn't it the norm to create a place to publish your work (and only your work) for your own use? IOW, the above two lines solicit questions like "So... what happens when publish does already exist??? and where does that publish repository come from???"
Re: [PATCH v2] doc: add triangular workflow
"BENSOUSSAN--BOHM DANIEL p1507430" wrote: > Added a new file about triangular workflow for a clearer organization. "for a clearer organization" is an explanation of why you are doing things this way compared to your previous email. But this is the commit message, and its wording shoud make sense in this context, i.e. regardless of previous emails you sent which won't appear it the Git history. Now, read again this sentence: adding a file about triangular workflow does not make any "organization" "clearer". > With a more precise documentation, any new Git contributors > will spend less time on understanding this doc and the way Git works. I understand what you mean, but adding a new piece of documentation cannot make people spend less time on this particular documentation. Also "any new Git contributors will spend less time" sounds like marketing speach, not technical. Your goal is to make it easier for new users, but claiming that everybody is going to gain time by reading your documentation is a bit overselling your text. I don't think you should talk about "Git contributors", which can be read as "contributors to the git.git codebase". "Git users" would make more sense, or perhaps you meant "contributors to Git projects". But actually, I don't think this kind of documentation should focus only on new users. I think many reasonably advanced Git users do not know about remote.pushdefault for example. > diff --git a/Documentation/Makefile b/Documentation/Makefile > index 2ab6556..c3e98c7 100644 > --- a/Documentation/Makefile > +++ b/Documentation/Makefile > @@ -10,6 +10,7 @@ OBSOLETE_HTML = > MAN1_TXT += $(filter-out \ > $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \ > $(wildcard git-*.txt)) > +MAN1_TXT += git-triangular-workflow.txt git-*.txt is reserved for actual Git commands. Other tutorials use git*.txt (e.g. we have gitworkflows.txt and not git-workflows.txt). > +- The project maintainer publishes a repository, called **UPSTREAM** in > +this document, which is a read-only for contributors. They can clone and s/a read-only/read-only/ Perhaps s/can/& only/ too. > +- Contributors publish their modifications by pushing to a repository, > +called **PUBLISH** in this document, and request a merge. > +- Opening a pull request Other items use full sentences, this one seems half-written. Actually, I think this item is included in the "request a merge" part of the previous one. > +This workflow is commonly used on different platforms like BitBucket, > +GitHub or GitLab which provide a dedicated mechanism for requesting merges. As a user, I find it terribly frustrating when reading documentation telling me that "there's a dedicated mechanism" for something without telling me actually how to do it. > + > + > +-- - > +| UPSTREAM | maintainer | PUBLISH | > +||- - - - - - - -| | > +-- <- - > + \ / > + \ / > +fetch | \ / ^ push > + v \ / | > + \ / > + - > + | LOCAL | > + - This kind of diagram deserves a bit of text to explain the situation. For example, LOCAL is local only for the contributor (the maintainer doesn't need to know about it for example). I'd add a sentence to explain that this gives the overall view on the flow, from the point of view of a contributor. > +With the triangular workflow, the contributors have the write > +access on **PUBLISH** and push their code there. Only the "have write access", no need for "the". > +* Code review is made before integration. > + > +In a triangular workflow the rest of the community or the company > +can review the code before it's in production. Everyone can read on > +**PUBLISH** so everyone can review code before the maintainer merge > +it to **UPSTREAM**. In a free software, anyone can > +propose code. Reviewers accept the code when everyone agree > +with it. > + > +* Encourages clean history by using `rebase -i` and `push --force` to > +the public fork before the code is merged. "Encourages" has no subject. It could be OK, but for consistency with other items I'd add one ("Triangular workflow encourages ..."?). > +If **PUBLISH** doesn't exist, a contributor can publish his own repository. > +**PUBLISH** contains modifications before integration. > + > + > +* `git clone ` > +* `git remote add **PUBLISH**` git remote add needs two arguments, you're giving only one. > +* `git push` This will push to UPSTREAM, right? > +Adding **UPSTREAM** remote: > + > +=== > +`git remote add upstream ` > +=== In which circumstance sha