git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Philip Oakley" <philipoakley@iee.org>
To: "Jordan DE GEA" <jordan.de-gea@grenoble-inp.org>, <gitster@pobox.com>
Cc: <mhagger@alum.mit.edu>, <git@vger.kernel.org>,
	<erwan.mathoniere@grenoble-inp.org>,
	<samuel.groot@grenoble-inp.org>, <tom.russello@grenoble-inp.org>,
	<Matthieu.Moy@grenoble-inp.fr>, <peff@peff.net>,
	<artagnon@gmail.com>,
	"Jordan DE GEA" <jordan.de-gea@grenoble-inp.org>
Subject: Re: [PATCHv4] Documentation: triangular workflow
Date: Thu, 9 Jun 2016 19:19:20 +0100	[thread overview]
Message-ID: <E41AB752AE614E189BC5BE289A8AEB2A@PhilipOakley> (raw)
In-Reply-To: 1465475708-1912-1-git-send-email-jordan.de-gea@grenoble-inp.org

From: "Jordan DE GEA" <jordan.de-gea@grenoble-inp.org>
> Currently, triangular workflow can be configured, but there is no
> documentation about it. A documentation is useful to keep
> configuration possibilities up-to-date.
>
> A new subsection is created in gitworkflow.
>
> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
> Signed-off-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
> Signed-off-by: Jordan DE GEA <jordan.de-gea@grenoble-inp.org>
> ---
> Changes since v3:
> * Text reorganized to follow:
>   - Introduction
>   - Preparation
>   - Staying up-to-date
>   - Alternatively
> * Texts added to explain why we use commands in:
>   - Preparation
>   - Alternatively
>
> Documentation/gitworkflows.txt | 177 
> ++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 176 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/gitworkflows.txt 
> b/Documentation/gitworkflows.txt
> index f16c414..1ec1f63 100644
> --- a/Documentation/gitworkflows.txt
> +++ b/Documentation/gitworkflows.txt
> @@ -463,6 +463,178 @@ if you get conflicts: `git am -3` will use index 
> information contained
> in patches to figure out the merge base.  See linkgit:git-am[1] for
> other options.
>
> +TRIANGULAR WORKFLOW
> +-------------------
> +
> +In some projects, you cannot push directly to the project but have to
> +suggest your commits to the maintainer (e.g. pull requests).
> +For these projects, it's common to use what's called a *triangular
> +workflow*:
> +
> +- Taking the last version of the project by fetching from **UPSTREAM**
> +- Writing modifications and push them to a fork (e.g. **PUBLISH**)

s/a fork/an accessible fork/
Isn't one of the key points of the triangle that the user can't push to the 
upstream? (and the maintainer can't see the users local repo)

> +- Opening a pull request
s/request/request (formally or informally)/

> +- If the maintainer accepts the changes, he merges them into the
a Catch 22 here. The maintainer needs first to fetch, or othewise read, the 
mods before she could accept the changes. Perhaps

- The maintainer fetches, and reviews, the proposed changes; And if 
acceptable, merges them into the upstream.

the exact timing of the fetch will depend on the review system (see below).

> +  **UPSTREAM** repository.
> +
> +
> +........................................
> +------------------               -----------------
> +| UPSTREAM       |  maintainer   | PUBLISH       |
> +|  git/git       |- - - - - - - -|  me/remote    |
> +------------------       ←       -----------------
> +              \                     /
> +               \                   /
> +          fetch↓\                 /↑push
> +                 \               /
> +                  \             /
> +                   -------------
> +                   |   LOCAL   |
> +                   -------------
> +........................................
> +
> +Motivations
> +~~~~~~~~~~~
> +
> +* Allows contributors to work with Git even though they do not have
> +write access to **UPSTREAM**.
> +
> +* Allows maintainers to receive code from contributors they may not
> +trust.
s/trust/trust with psuh access/
It is the push/pull access issues that create the triangular workflow!

> +
> +* Code review is more efficient

more efficient than ??? in environment ??? (e.g. a review process of web 
viewing/commenting on GitHub, driven by a limited patch/mail server 
capability)


> +
> +* Encourages clean history by using `rebase -i` and `push --force` to
> +your public fork before the code is merged
> +
> +Preparation
> +~~~~~~~~~~~
> +
> +Cloning from **PUBLISH**, which is a fork of **UPSTREAM** or an empty
> +repository.

I agree here. To clone the upstream, to which you have no push access (by 
definition), would leave the config badly mis-set for the basic user. It's 
better for the user to clone their publish fork (to which they have both 
read and write access).

One issue may be the different expectations of how the fork is created (it's 
only one click on the GitHub..)

It may be worth covering the remote rename option to set that origin to the 
short and sweet 'me', or 'my', as per the ascii diagram.

> +
> +======================
> +`git clone <PUBLISH_url>`
> +======================
> +
> +Setting the behavior of push for the triangular workflow:
> +
> +===========================
> +`git config push.default current`
> +===========================
> +
> +Adding **UPSTREAM** remote:
> +
> +===================================
> +`git remote add upstream <UPSTREAM_url>`
> +===================================
> +
> +With the `remote add` above, using `git pull upstream` pulls there,
> +instead of saying its URL. In addition, `git pull` can pull from
> +**UPSTREAM** without argument.
> +
> +For each branch requiring a triangular workflow, set
> +`branch.<branch>.remote` and `branch.<branch>.pushRemote`.
> +
> +Example with master as <branch>:
> +===================================
> +* `git config branch.master.remote upstream`
> +* `git config branch.master.pushRemote origin`
> +===================================
> +
> +Stay up-to-date
> +~~~~~~~~~~~~~~~
> +
> +Retrieve updates from **UPSTREAM** with `git pull` and send them to
> +**PUBLISH** with `git push`.
> +
> +Checks
> +~~~~~~
> +
> +.Display the push remote's name:
> +[caption="Recipe: "]
> +
> +=================================
> +`git rev-parse --abbrev-ref @{push}`
> +=================================
> +
> +The shorthand `<branch>@{push}` denotes the remote-tracking branch
> +where the <branch> would be pushed to. If no <branch> is specified
> +(`@{push}`), <branch> takes the value of the current branch.
> +
> +
> +.Display the fetch remote's name:
> +[caption="Recipe: "]
> +
> +===================================
> +`git rev-parse --abbrev-ref @{upstream}`
> +===================================
> +
> +The shorthand `<branch>@{upstream}` substitutes the upstream name of
> +the branch. If no <branch> is specified (`@{upstream}`), <branch>
> +takes the value of the current branch.
> +
> +.Display commits added to the current branch since last push:
> +[caption="Recipe: "]
> +
> +===============
> +`git log @{push}..`
> +===============
> +
> +.Display commits added to a specific branch since last push:
> +[caption="Recipe: "]
> +
> +============================
> +`git log <branch_name>@{push}..`
> +============================
> +
> +Alternative configuration
> +~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +.Cloning from **UPSTREAM**
> +[caption="Recipe: "]
> +
> +In the preparation above, a clone from **PUBLISH** was used. Starting
> +with a clone of **UPSTREAM** is possible too.
> +
> +Cloning from **UPSTREAM**
> +
> +======================
> +`git clone <UPSTREAM_url>`
> +======================
> +
> +Setting the behavior of push for the triangular workflow:
> +
> +===========================
> +`git config push.default current`
> +===========================
> +
> +Because modifications will be often pushed into the **PUBLISH** 
> repository,
> +instead of having to type its URL every time, a short name can be used
> +to call it.
> +
> +Adding **PUBLISH** remote:
> +
> +===================================
> +`git remote add publish <PUBLISH_url>`
> +===================================
> +
> +With the `remote add` above, using `git push publish` pushes there,
> +instead of saying its URL. In addition, `git push` can push to
> +**PUBLISH** without argument.
> +
> +'Method 1: One option for all branches'
> +
> +===================================
> +`git config remote.pushDefault publish`
> +===================================
> +
> +'Method 2: Each branch its option'
> +
> +Example with master as <branch>:
> +===================================
> +`git config branch.master.pushRemote publish`
> +===================================
>
> SEE ALSO
> --------
> @@ -473,7 +645,10 @@ linkgit:git-merge[1],
> linkgit:git-rebase[1],
> linkgit:git-format-patch[1],
> linkgit:git-send-email[1],
> -linkgit:git-am[1]
> +linkgit:git-am[1],
> +linkgit:git-config[1],
> +linkgit:git-log[1],
> +linkgit:git-rev-parse[1]
>
> GIT
> ---

  parent reply	other threads:[~2016-06-09 19:22 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-26 10:06 [RFC] Triangular Workflow: user friendly full implementation Jordan DE GEA
2016-05-26 11:04 ` Matthieu Moy
2016-05-26 18:30 ` Junio C Hamano
2016-05-30  8:46   ` [RFC] Triangular Workflow UI improvement Jordan DE GEA
2016-05-27  7:32 ` [RFC] Triangular Workflow: user friendly full implementation Philip Oakley
2016-05-30  9:07   ` [RFC] Triangular Workflow UI improvments Jordan DE GEA
2016-05-31 12:28     ` [RFC/PATCH] Triangular Workflow UI improvement: Documentation Jordan DE GEA
2016-05-31 14:33       ` Matthieu Moy
2016-06-01  9:32         ` Jordan DE GEA
2016-06-02 12:02         ` Michael Haggerty
2016-06-03  7:25       ` Philip Oakley
2016-06-03  9:52         ` Jordan DE GEA
2016-06-03 11:36           ` Matthieu Moy
2016-06-03 11:53             ` Jordan DE GEA
2016-06-05 21:28             ` Jordan DE GEA
2016-06-06  7:58               ` Matthieu Moy
2016-06-06 16:46                 ` Philip Oakley
2016-06-06 16:54                   ` Matthieu Moy
2016-06-06 19:21                     ` Philip Oakley
2016-06-07  7:03                       ` Matthieu Moy
2016-06-07 20:08                         ` Philip Oakley
2016-06-03 15:46         ` Junio C Hamano
2016-06-03 22:16           ` Philip Oakley
2016-06-06  9:48       ` [RFC/PATCHv2] Documentation: triangular workflow Jordan DE GEA
2016-06-06 19:23         ` Junio C Hamano
2016-06-06 22:21           ` Philip Oakley
2016-06-07  6:58             ` Matthieu Moy
2016-06-07  8:02               ` Jordan DE GEA
2016-06-07  8:38         ` [PATCHv3] " Jordan DE GEA
2016-06-07 19:12           ` Junio C Hamano
2016-06-08  8:37             ` Jordan DE GEA
2016-06-08 13:20             ` Matthieu Moy
2016-06-09 12:35           ` [PATCHv4] " Jordan DE GEA
2016-06-09 17:02             ` Junio C Hamano
2016-06-11 15:58               ` Ramkumar Ramachandra
2016-06-11 19:31                 ` Philip Oakley
2016-06-09 18:19             ` Philip Oakley [this message]
2016-06-10 16:47               ` Junio C Hamano
2016-06-11 19:25                 ` Philip Oakley
2016-06-13 18:35                   ` Junio C Hamano
2016-05-30  8:39 ` [RFC] Triangular Workflow UI improvement Jordan DE GEA

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E41AB752AE614E189BC5BE289A8AEB2A@PhilipOakley \
    --to=philipoakley@iee.org \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=artagnon@gmail.com \
    --cc=erwan.mathoniere@grenoble-inp.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jordan.de-gea@grenoble-inp.org \
    --cc=mhagger@alum.mit.edu \
    --cc=peff@peff.net \
    --cc=samuel.groot@grenoble-inp.org \
    --cc=tom.russello@grenoble-inp.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).