Join GitHub today
If you're a developer who wants to work on the Kudu source code and submit your changes for consideration to be merged into the master branch, here's how. This page was inspired by this guide.
If you're not familiar with Git
Maybe this will help:
Do's and Don't's
If you're familiar with git and GitHub, here's the short version of what you need to know. Once you fork and clone the Kudu code:
Don't develop on the master branch. Always create a development branch specific to the issue you're working on. Name it by issue # and description. For example, if you're working on Issue #26, a Skipfish import plugin, your development branch should be called 26-skipfish-plugin. If you decide to work on another issue mid-stream, create a new branch for that issue—don't work on both in one branch.
Do not merge the upstream master with your development branch; rebase your branch on top of the upstream master.
A single development branch should represent changes related to a single issue. If you decide to work on another issue, create another branch.
- Fork on GitHub (click Fork button)
- Clone to computer ($ git clone email@example.com:you/kudu.git )
- Don't forget to cd into your repo: ($ cd kudu/ )
- Set up remote upstream ($ git remote add upstream git://github.com/projectkudu/kudu.git)
- Create a branch for new issue ($ git checkout -b 100-new-feature, if you don't have a bug report no worries just skip the number)
- Develop on issue branch. [Time passes, the main Kudu repository accumulates new commits]
- Commit changes to issue branch. ($ git add . ; git commit -m 'commit message')
- Fetch upstream ($ git fetch upstream)
- Update local master ($ git checkout master; git pull upstream master)
- Repeat steps 6-8 till dev is complete
- Rebase issue branch ($ git checkout 100-new-feature; git rebase master)
- Push branch to GitHub ($ git push origin 100-new-feature)
- Issue pull request (Click Pull Request button)
Squash commits before pushing to master
To keep our history clean, it's best to squashing commits before pushing to master, unless it makes sense to have separate commits.
- "First part of work" and "second part of work" is fine, BUT
- "Fixed this issue", followed by "oh crap fixed typo" is dirty, and adds no value to the history line
You can find simple instructions here, using interactive rebasing.