Thank you all for the feedback, that was very helpful.

I have adjusted my steps quite a bit.  Here is an overview...
- I have removed the 'squashed' concept.  I think it makes sense that the
'default' way that people contribute is with a full history of their
changes and commit messages.  I hope this does not increase the amount of
work for the people committing the pull requests, but I have not seen that
process yet.
- I have removed the concept of 'patches' from this flow.  I originally
wrote this for patching because this is how I commit to code, but this flow
is different and we should not confuse the two when documenting how to
contribute to the documentation.
- I have done a much better job of describing why we do the different steps
and why the different pieces are important.  You guys made good comments on
those aspects, so I tried to incorporate your feedback.
- Instead of making a generic guide, I customized this guide to the
specific documentation repository.  I will do an initial pull request for
this addition to the README.rst file for the 'cloudstack-docs-admin'
repository.  If everyone is happy with this, I will create the equivalent
customized additions for the other README.rst files and create pull request
for them.  I did this because not seeing a real URL may confuse new people
when trying to do these steps.  Since this will be shown on the front page
of the GitHub repo, it makes sense that it is setup for that repo.

I think that is pretty much it.  I will create a pull request for the
'cloudstack-docs-admin' repo now with what is below.  If you have comments
or suggestions, please let me know and I will update the doc.

Cheers,

Will

-----

Contributing to the documentation
=================================

Initial setup of your fork
--------------------------

In your browser, navigate to:
https://github.com/apache/cloudstack-docs-admin

Fork this repository by clicking on the 'Fork' button on the top right hand
side.  The fork will happen and you will be taken to your own fork of the
repository.  On the right hand side of the page of your fork, under 'HTTPS
clone URL', copy the URL to your clipboard by clicking the the clipboard
just right of the URL.

On your computer, follow these steps to setup a local repository for
working on the documentation:

.. code:: bash

$ git clone https://github.com/YOUR_ACCOUNT/cloudstack-docs-admin.git
$ cd cloudstack-docs-admin
$ git remote add upstream https://github.com/apache/cloudstack-docs-admin
$ git checkout master
$ git fetch upstream
$ git merge upstream/master


Making changes
--------------

It is important that you create a new branch to make changes on and that
you do not change the `master` branch (other than to pull in changes from
`upstream/master`).  In this case I will assume you will be creating a
branch called `dev` to make your changes in.  This `dev` branch will be
created on your local repository and will then be pushed to your forked
repository on GitHub where you will create a Pull Request for the changes
to be committed into the official documentation.

It is good practice to create a new branch each time you want to contribute
to the documentation and only track the changes for that pull request in
this branch.

.. code:: bash

$ git checkout -b dev
(make your changes)
$ git add .
$ git commit -a -m "commit message for your changes"

.. note::
The `-b` specifies that you want to create a new branch called `dev`.  You
only specify `-b` the first time because you are creating a new branch.
 Once the `dev` branch exists, you can later switch to it with only `git
checkout dev`.


Merging `upstream/master` into your `dev` branch
------------------------------------------------

It is important that you maintain an up-to-date `master` branch in your
local repository.  This is done by merging in the `upstream/master` (the
official documentation repository) into your local repository.  You will
want to do this before you start working on a feature as well as right
before you submit your changes as a pull request.  You can also do this
process periodically while you work on your changes to make sure you are
working off the most recent version of the documentation.

This process will do the following:

#. Checkout your local `master` branch

#. Synchronize your local `master` branch with the `upstream/master` so you
have all the latest changes from the official docs

#. Merge the latest changes from the official docs into your `dev` branch
so it is up-to-date with the latest changes

.. code:: bash

$ git checkout master
$ git fetch upstream
$ git merge upstream/master
$ git checkout dev
$ git pull . master

.. note:: Now your `dev` branch is up-to-date with all the recent changes
in the `upstream/master`.


Making a pull request on GitHub to contribute your changes
----------------------------------------------------------

When you are happy with your changes and you want to contribute them, you
will be creating a Pull Request on GitHub to do so.  This is done by
pushing your changes to your forked repository (usually called 'origin')
and then initiating a pull request.

.. note:: Make sure you have merged `upstream/master` into your `dev`
branch before you do this.

.. code:: bash

$ git push origin master
$ git push origin dev

Now that the `dev` branch has been pushed to your GitHub repository, you
can initiate the pull request.

To initiate the pull request, do the following:

#. Navigate your browser to your forked repository:
https://github.com/YOUR_ACCOUNT/cloudstack-docs-admin.git

#. Click the new button called 'Compare & pull request' that showed up just
above the main area in your forked repository

#. Enter a good description of the work you have done and then click 'Send
pull request'

If you are requested to make modifications to your proposed changes, make
the changes locally on your `dev` branch, re-push the changes and submit
the pull request again.


Cleaning up after a successful pull request
-------------------------------------------

Once the `dev` branch has been committed into the `upstream/master` branch,
your local `dev` branch and the `origin/dev` branch are not needed anymore.
 If you want to make additional documentation changes, restart the process
with a new branch.

.. note:: Make sure that your changes are in `upstream/master` before you
delete your `dev` and `origin/dev` branches!

You can delete these deprecated branches with the following:

.. code:: bash

$ git checkout master
$ git branch -D dev
$ git push origin :dev



On Fri, May 23, 2014 at 9:01 AM, Will Stevens <williamstev...@gmail.com>wrote:

> All good feedback. Thanks.
>
> I will rework this on Monday and add a PR for adding it to the readmes.
>
> Thx,
>
> Will
>
>
> On Friday, May 23, 2014, Stephen Turner <stephen.tur...@citrix.com> wrote:
> > I've not seen Phabricator, but yes, what I like about github is that the
> code review is built into the source control. This makes the whole workflow
> much simpler.
> >
> > --
> > Stephen Turner
> >
> >
> > -----Original Message-----
> > From: rohityada...@gmail.com [mailto:rohityada...@gmail.com] On Behalf
> Of Rohit Yadav
> > Sent: 23 May 2014 11:35
> > To: dev@cloudstack.apache.org
> > Cc: Sebastien Goasguen; Pierre-Luc Dion
> > Subject: Re: [DOCS] Git Flow
> >
> > Hi,
> >
> > Good effort. Will you should also see this and update the wiki as needed:
> > https://cwiki.apache.org/confluence/display/CLOUDSTACK/Git
> >
> > I would say, squashed merges are much better when you're going through
> list of changes [1] instead of having a branch based workflow,
> reverting/fixing/bisecting it becomes much easier. I would recommend
> Stephen and others to checkout Phabricator's pre and post code reviewing
> and their CLI tool arcanist which IMO give a much better workflow.
> >
> > Right now it's too much pain for a contributor to create a patch, upload
> to reviewboard, get it reviewed and then for the committer to go see RB,
> test/review patch and merge it. This is all manual work. Pull request is
> one good way to solve it at the cost of complicating git trees/graphs,
> emailing patch directly to ML can be another (historically worked?) and
> using something like Phabricator (that can be hosted on ASF infra) is
> another way as well.
> >
> > [1] See the git network/graph: git log --graph --decorate
> --pretty=oneline --abbrev-commit --all
> >
> > Regards.
> >
> >
> > On Fri, May 23, 2014 at 3:20 PM, Stephen Turner
> > <stephen.tur...@citrix.com>wrote:
> >
> >> I'm not a fan of squashed merges myself, because you lose the history,
> >> which can often contain useful check-in comments.
> >>
> >> My preferred github workflow is to make a new local branch before
> >> starting any change, push that to a branch in my fork of the project
> >> on github, and then send a pull request. I don't do subsequent work on
> >> the same branch (unless the maintainer wants further changes before
> >> accepting the pull request), so I don't run into the problem where
> >> pull requests build on each other.
> >>
> >> Having said that, I'm talking about code, not documentation. There may
> >> be some reason I'm not aware of why documentation works better with a
> >> different workflow.
> >>
> >> --
> >> Stephen Turner
> >>
> >>
> >> -----Original Message-----
> >> From: williamstev...@gmail.com [mailto:williamstev...@gmail.com] On
> >> Behalf Of Will Stevens
> >> Sent: 22 May 2014 21:36
> >> To: dev@cloudstack.apache.org; Sebastien Goasguen; Pierre-Luc Dion
> >> Subject: [DOCS] Git Flow
> >>
> >> Hey All,
> >> In the the README.rst files in the documentation, it refers to this
> >> page if you want to contribute:
> >> http://cloudstack.apache.org/developers.html
> >>
> >> I am not sure those instructions are actually up-to-date or valid for
> >> contributing to the documentation.
> >>
> >> I originally tried to use this process (
> >> https://help.github.com/articles/syncing-a-fork) to keep my
> >> documentation fork up-to-date with the upstream/master, but after the
> >> first pull request the commits have to be cherry-picked because the
> >> pull requests will always take everything I have committed in my fork
> >> rather than the changes since the last pull request.  This got annoying
> quickly.
> >>
> >> When contributing to the actual CloudStack code I used a squashed
> >> patch approach which worked very well.  I have written up that flow as
> >> well as a similar flow for working with Github pull requests.
> >>
> >> I would like you to review what I have written.  If you guys approve
> >> of the flow, I would like to add it to the README.rst files in the
> >> different documentation repositories to make it easier for people to
> >> contribute to the documentation.  I know I found it really hard to
> >> figure out how to contribute to the documentation initially.  We want
> >> to lower the bar a bit on this so more people feel comfortable helping
> with the documentation.
> >>
> >> L
>

Reply via email to