Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Contribution Processes

Special thanks to Apache Kafka from which most of this documented process was blatantly copied.

Table of Contents
minLevel2

Casual Browsing

Code Block
https://git-wip-us.apache.org/repos/asf?p=knox.git

Contributor Workflow

This is the simple workflow and will work well for small features development for people who don't have direct access to check in to the Apache repository. Let's assume you are working on a feature or bug called, KNOX-nnn:

1. Checkout a new repository:

Code Block
git clone git://git.apache.org/knox.git

2. Create and checkout a branch to work in:

Code Block
git checkout -b KNOX-nnn remote/origin/master

3. Do some work on this branch and periodically checkin locally:

Code Block
git commit -a

4. When done (or periodically) rebase your branch to take any changes from trunk:

Code Block
git pull --rebase origin master

5. Make a patch containing your work and upload it to JIRA:

Code Block
git format-patch master --stdout > KNOX-nnn.patch

6. You may need to iterate/rebase your patch a few times as people comment on the code until a commit checks it in to the main repository.

You will also want to ensure you have your username and email setup correctly so that we correctly record the source of the contribution:

Code Block
git config --global user.name "Joe Coder"
git config --global user.email "jcoder@fake.org"

Reviewer Workflow

This assumes you already have a copy of the repository.

1. Make sure your code is up-to-date:

Code Block
git fetch

2. Checkout the destination branch:

Code Block
git checkout master

3. See what the patch will do:

Code Block
git apply --stat KNOX-nnn.patch

4. See that the patch will apply cleanly (otherwise prod the contributor to rebase):

Code Block
git apply --check KNOX-nnn.patch

6. Apply the patch to trunk

Code Block
git am --signoff < KNOX-nnn.patch

If you get an error that says "Patch does not have a valid e-mail address." then the patch might have been created by doing git diff in which case you can apply the patch using.

Code Block
patch -p1 < KNOX-nnn.patch

If the am operation failed you will also need to remove the .git/rebase-apply/ that gets created

7. If things go wrong (tests fail, you find some problem, etc), you can back out:

Code Block
git reset --hard HEAD
git clean -f

8. If after review and running the test you want to push the change into the Apache repo:

Code Block
git push origin master

Committer Workflow

If you have commit access on the Apache repository then you will not be applying patches in the manner described in the reviewer workflow. Instead, once your patch has been reviewed you will check it in yourself as follows:

1. Create a branch to work on:

Code Block
git fetch
git checkout -b KNOX-nnn remotes/origin/master

2. Implement the feature. Commit as desired to phase the work.

Code Block
commit -am "<short message about progress.>"

3. Rebase as required to track the master branch.

Code Block
git stash
git rebase remotes/origin/master
git stash pop

4. Run the tests. Should always rebase before testing before submitting a patch.

Code Block
ant verify

5. Create a patch

Code Block
git reset --soft origin/master
git commit -am "KNOX-nnn: <short, meaningful message>"
git format-patch origin/master --stdout > KNOX-nnn.patch

6. Post the change patch file to JIRA and get it reviewed.

7. Push the change back to Apache. Pick one of the following:

Code Block
git push

Committer Workflow using Git Branches

If you are working on a sizable set of code, for instance, implementing a significant feature, then it is recommended to use a Git remote branch. This will not only help backup your code but also ensure the master branch is never in an unstable state. Also, using a branch will make for easy code reviews and collaboration. 

The workflow for creating a remote branch and using it is the following (presuming that you have done a git clone and are in the master branch) :

  1. Create a local branch from master:
Code Block
git checkout -b KNOX-nnn

2. Push the local branch remote and setup remote tracking

Code Block
git push -u origin KNOX-nnn

 

3. Implement the feature and commit and push as desired.

Code Block
git commit -am "<short message about commit>"
git push

 

4. To update the branch from master at any time

Code Block
git pull --rebase origin master

 

5. To merge the branch back into master, first switch to the master branch and then merge.

Code Block
git checkout master
git merge KNOX-nnn
git push

 

6. After all code has been merged and the branch is no longer needed, it can be deleted remotely with:

Code Block
git push origin :KNOX-nnn

To delete the branch locally

Code Block
git branch -d KNOX-nnn

 

Github Workflow

Apache doesn't seem to provide a place to stash your work-in-progress branches or provide some of the nice social features github has. This can be a problem for larger features. Here are instructions for using github as a place to stash your work in progress changes.

Setting Up

1. As in the other workflows begin by checking out Knox (if you haven't already):

Code Block
git clone git://git.apache.org/knox.git/

This sets up the remote alias "origin" automatically which refers back to the Apache repo.
2. Create a new github repository on your github account to use for stashing changes. There are various ways to do this, I just forked the Apache Knox repo (https://github.com/apache/knox) which creates a repo https://github.com//knox
3. Add an alias on your local repository to github to avoid typing:

Code Block
git remotes add github https://github.com/<github_username>/knox.git

Now you can push either to origin or to github.

Doing Work

1. You can create a branch named KNOX-nnn in your local repository and check it out

Code Block
git checkout -b KNOX-nnn remotes/origin/master

2. To set up a second machine to work on you can clone the github url.
3. To save your branch to your github repo do

Code Block
git push github KNOX-nnn

4. To pull these changes onto the other machine where you have a copy of the repository you can do:

Code Block
git fetch github
git checkout KNOX-nnn
git merge remotes/github/KNOX-nnn

Review and pushing changes back to Apache works just as before.

Documentation Contributor Workflow

All of the documentation is maintained in a separate SVN repository to facilitate independent updates.

1. Checkout the SVN repository.

Code Block
svn checkout https://svn.apache.org/repos/asf/knox knox-site
cd knox-site

2. Edit site or documentation files.  Note that there are no version branches in the SVN repo.  Each version of the guides are maintained in separate directories identified by {version} in the example command blow.  In addition, most of the guides are in Markdown format and are broken into multiple sections as indicated by {section}.md in the command below.  These fils can be edited with the tool of your choice vi is only used as an example.

Code Block
vi trunk/books/{version}/{section}.md

3. Create a patch.  We recommend naming the patch using the JIRA ID.  Upload the patch to the JIRA and request review from a committer.

Code Block
svn diff > KNOX-nnn.patch

 

Include Page
Footer
Footer