= Using GitHub to Contribute to WebKit (Experimental) = Sometimes when folks are developing an experimental feature, they feel stressed by WebKit's current code review system because breaking their feature down into many small patches that land over a period of weeks makes it harder for them to iterate on the feature. This document describes an alternative process for contributing to WebKit that uses a more git-like approach based on GitHub's tools. This process is somewhat experimental, but it might work well for folks who are familiar with git-style development and are working on largely self-contained features. Because this process is experimental, you'll probably want to line up a reviewer for you changes ahead of time to make sure they're interested in using this process. ''Note: This document assumes that you're already familiar with git and GitHub. If you're interested in learning about git and/or GitHub, there are lots of great tutorials and blog posts around the web. (Please feel encouraged to add links that you've found helpful.) == Setup == 1. Create a GitHub account (if you don't already have one) 1. Fork https://github.com/WebKit/webkit 1. `$ git clone git@github.com:yourname/webkit.git` == Writing code == 1. `$ git checkout master -b awesomefeature` 1. Write some awesome code. 1. Commit locally and push to origin (your GitHub account) as you normally would with git. == Tracking upstream == 1. One-time setup: [http://trac.webkit.org/browser/trunk/Tools/Scripts/configure-github-as-upstream /Tools/Scripts/configure-github-as-upstream] 1. [http://trac.webkit.org/browser/trunk/Tools/Scripts/sync-master-with-upstream ./Tools/Scripts/sync-master-with-upstream] If you never modify your local master branch, merging upstream/master will always be a fast-forward merge (i.e., no merge conflicts). You can then merge these new commits into your in-flight feature branches as you normally would with git. == Rebase from upstream/master == 1. Make sure all commits are complete on your awesomefeature branch. 1. `$ git checkout master` 1. `$ git pull upstream master` 1. `$ git checkout awesomefeature` 1. `$ git rebase master` 1. Fix merge conflicts through the rebase as you normally would with git. 1. Push rebased awesomefeature up to your fork: `$ git push --force origin awesomefeature` == Existing (live/dead) branches == * https://github.com/eseidel/webkit/tree/seamless * https://github.com/abarth/webkit/tree/csp11 * https://github.com/adobe/webkit/tree/may2012-f2f-prototype * https://github.com/adobe/webkit/tree/june2012-exclusions * (List your branch here.)