| <!DOCTYPE html><html><head><meta charset="utf-8"><title>Apache Pony Mail (Incubating)</title> |
| <link rel="stylesheet" type="text/css" href="/css/default.css"/> |
| <link rel="stylesheet" type="text/css" href="/css/fa/fa.css"/> |
| <link rel="apple-touch-icon" sizes="57x57" href="/icons/apple-icon-57x57.png"> |
| <link rel="apple-touch-icon" sizes="60x60" href="/icons/apple-icon-60x60.png"> |
| <link rel="apple-touch-icon" sizes="72x72" href="/icons/apple-icon-72x72.png"> |
| <link rel="apple-touch-icon" sizes="76x76" href="/icons/apple-icon-76x76.png"> |
| <link rel="apple-touch-icon" sizes="114x114" href="/icons/apple-icon-114x114.png"> |
| <link rel="apple-touch-icon" sizes="120x120" href="/icons/apple-icon-120x120.png"> |
| <link rel="apple-touch-icon" sizes="144x144" href="/icons/apple-icon-144x144.png"> |
| <link rel="apple-touch-icon" sizes="152x152" href="/icons/apple-icon-152x152.png"> |
| <link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-icon-180x180.png"> |
| <link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png"> |
| <link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32x32.png"> |
| <link rel="icon" type="image/png" sizes="96x96" href="/icons/favicon-96x96.png"> |
| <link rel="icon" type="image/png" sizes="16x16" href="/icons/favicon-16x16.png"> |
| <link rel="manifest" href="/icons/manifest.json"> |
| <meta name="msapplication-TileColor" content="#ffffff"> |
| <meta name="msapplication-TileImage" content="/icons/ms-icon-144x144.png"> |
| <meta name="theme-color" content="#ffffff"> |
| </head><body> |
| <div id="titlebar"> |
| <a href="/contribute.html"><img align='left' style="width: 130px; height: 125px; position: relative; left: -6px; top: -6px; border: 0;" src="/images/devme.png" alt="Fork/Hack on Pony Mail"></a> |
| <img src="/images/ponymail.svg" style="width: 110px; margin-left: -10px; margin-right: 20px; height: auto;" align="left"/> |
| <h1><a id="title" href="/" style="color: #FFF !important;">Apache Pony Mail™ (Incubating)</a></h1> |
| <div id="menubar"> |
| <ul> |
| <li><a href="/docs.html"><i class="fa fa-book"></i><span>Documentation</span></a></li> |
| <li><a href="/source.html"><i class="fa fa-git-square"></i><span>Source</span></a></li> |
| <li><a href="/downloads.html"><i class="fa fa-cloud-download"></i><span>Download</span></a></li> |
| <li><a href="/support.html"><i class="fa fa-question-circle"></i><span>Get support</span></a></li> |
| <li><a href="/contribute.html"><i class="fa fa-share-alt"></i><span>Contribute</span></a></li> |
| <li><a href="/about.html"><i class="fa fa-users"></i><span>About</span></a></li> |
| <li><a href="/apache.html"><i class="fa fa-info-circle"></i><span>ASF</span></a></li> |
| </ul> |
| </div> |
| </div> |
| <h1 id='contributingtoponymail'>Contributing to Pony Mail<a href='#contributingtoponymail' style='color: rgba(0,0,0,0);'>¶</a></h1> |
| <p>We'd LOVE if more people would contribute to Pony Mail! |
| Any form of contribution is most welcome, whether it be programming, |
| documentation, evangelism, marketing, or helping out other users.</p> |
| <h2 id='sourcecodeandissuetracker'>Source code and issue tracker<a href='#sourcecodeandissuetracker' style='color: rgba(0,0,0,0);'>¶</a></h2> |
| <p>Our canonical source repository is at: <a href="https://git-wip-us.apache.org/repos/asf/incubator-ponymail.git">https://git-wip-us.apache.org/repos/asf/incubator-ponymail.git</a></p> |
| <p>We also have a GitHub mirror at: <a href="https://github.com/apache/incubator-ponymail">https://github.com/apache/incubator-ponymail</a></p> |
| <p>We currently use GitHub Issues for tracking bugs and improvements: <a href="https://github.com/apache/incubator-ponymail/issues">https://github.com/apache/incubator-ponymail/issues</a></p> |
| <h2 id='contributingguideline'>Contributing guideline<a href='#contributingguideline' style='color: rgba(0,0,0,0);'>¶</a></h2> |
| <p>To contribute to Pony Mail, follow these steps:</p> |
| <ul> |
| <li><a href="/source.html">Fork the repo</a></li> |
| <li>Subscribe to the Pony Mail dev list:</li> |
| <li> |
| <ul> |
| <li>Either send an email to dev-subscribe@ponymail.incubator.apache.org OR</li> |
| </ul> |
| </li> |
| <li> |
| <ul> |
| <li>Visit <a href="https://lists.apache.org/list.html?dev@ponymail.apache.org">https://lists.apache.org/list.html?dev@ponymail.apache.org</a> (You can use Persona or ASF OAuth)</li> |
| </ul> |
| </li> |
| <li>Find something to fix or help out with.</li> |
| <li>Let us know what you want to do by opening an <a href="https://github.com/apache/incubator-ponymail/issues">issue</a> or a pull request.</li> |
| <li>Join us on #ponymail on the Freenode IRC network.</li> |
| </ul> |
| <h2 id='gitworkflow'>Git Workflow<a href='#gitworkflow' style='color: rgba(0,0,0,0);'>¶</a></h2> |
| <p>The following workflow is adapted from the <a href="https://cwiki.apache.org/confluence/display/JCLOUDS/Git+workflow">jClouds workflow</a>:</p> |
| <h4 id='prepareyourfork'>Prepare your fork<a href='#prepareyourfork' style='color: rgba(0,0,0,0);'>¶</a></h4> |
| <p>The first thing to do is to make sure you have the ponymail Git |
| repository configured as a remote. In this case we will add it as a |
| remote called "ponymail": |
| <pre> |
| cd ponymail |
| git remote add ponymail https://git-wip-us.apache.org/repos/asf/incubator-ponymail.git |
| </pre></p> |
| <h4 id='createthefeaturebranch'>Create the feature branch<a href='#createthefeaturebranch' style='color: rgba(0,0,0,0);'>¶</a></h4> |
| <p>When beginning working on the feature, take a branch from the latest master version: |
| <pre> |
| git checkout master |
| git fetch ponymail |
| git reset --hard ponymail/master |
| git checkout -b feature-branch |
| </pre></p> |
| <p>As we want a clean master and we should never use directly use the |
| master branch (it should be only used to sync the fork with the upstream |
| repo), so we can just reset hard it instead of rebasing. Develop the |
| feature and address the review comments</p> |
| <p>Develop the feature normally, commit the changes (you can create N |
| commits if needed), and open the pull request.</p> |
| <p>Once the pull request is open and has been reviewed, address any review |
| comments and add the changes in new commits. This will make it easier |
| for the reviewer to focus only in the last changes without having to go |
| again through the entire pull request. Once the PR is ready to be |
| merged, you'll be asked to squash the commits. Preparing the pull |
| request to be merged</p> |
| <p>First squash the commits, to have a cleaner rebase (it is easier to rebase having one single commit than having N commits):</p> |
| <pre> |
| git rebase -i HEAD~N # Where N is the number of commits in the pull request |
| </pre> |
| |
| <p>Now that there is only one commit, update the branch to the latest version of master: |
| <pre> |
| git fetch ponymail |
| git rebase ponymail/master |
| </pre></p> |
| <p>At this point the local branch with one single commit on top of the latest master and it can be pushed to your fork: |
| <pre> |
| git push <your-fork's-remote> feature-branch -f # You might need to push with --force |
| # because of the rebase to the latest master |
| </pre></p> |
| <p>Now the pull request will be clean with one single commit and up to date |
| with the latest master. Ready to be merged!</p> |
| <h4 id='anoteaboutkeepingthepullrequestuptodate'>A note about keeping the pull request up to date<a href='#anoteaboutkeepingthepullrequestuptodate' style='color: rgba(0,0,0,0);'>¶</a></h4> |
| <p>The key point is to <em>avoid</em> updating your feature branch with master |
| until the PR is ready to be merged (or until you're asked to rebase). |
| This way you'll avoid accidental merge commits and fixing conflicts when |
| you shouldn't be dealing with that. If for you want to keep your branch |
| up to date with the latest master changes anyway, always rebase it; |
| don't git pull or introduce merge commits, as it will complicate the |
| rebasing process and will make it difficult to merge the pull request in |
| a clean way</p> |
| <h4><a id="disclaimer"></a>Disclaimer</h4> |
| <p style="font-size: 8pt; line-height: 12pt;"> |
| <a href="https://incubator.apache.org"><img src="/images/podling.svg" align="right" width="220px"/></a> |
| Apache Pony Mail (Incubating) is an effort undergoing incubation at |
| The Apache Software Foundation (ASF), sponsored by the <a href="https://incubator.apache.org"> |
| Apache Incubator</a>. Incubation is required of all newly accepted projects |
| until a further review indicates that the infrastructure, |
| communications, and decision making process have stabilized in a |
| manner consistent with other successful ASF projects. While |
| incubation status is not necessarily a reflection of the |
| completeness or stability of the code, it does indicate that the |
| project has yet to be fully endorsed by the ASF. |
| </p> |
| <p style="font-size: 8pt; line-height: 12pt;"> |
| Copyright 2016, the <a href="http://www.apache.org/">Apache Software Foundation</a>.<br/> |
| Apache Pony Mail and the Apache Pony Mail logo are trademarks of the Apache Software Foundation. |
| Apache and the Apache feather are registered trademarks of the |
| Apache Software Foundation. |
| </p> |
| </body></html> |