h1. Github Contributions

Some people prefer to make contributions to karaf source via github. If you are one of them, this is for you!


h2. Introduction

Apache Karaf is available as a periodically replicated mirror on: [https://github.com/apache/karaf] 


h2. Suggested Workflow

# make a fork of karaf repo github mirror
# do all your new work on your own karaf fork
# when ready, file a jira issue [https://issues.apache.org/jira/browse/KARAF], attach the link to your github pull request, and ask for a review
# one of karaf committers will discuss your pull request on github; and at some point your pull request will be accepted 
# when your pull request is accepted, squash it into a single commit and attach single patch file to the original jira, with ASF grant check box selected  
# now pray to your favorite ASF committer to really accept the patch :-)
# when your patch is committed to the svn, and you can verify it in the latest karaf snapshot, close your pull request on github 


h2. License Reminder

in order for your contributions to be accepted:

* all files must contain ASL license grant header

* you must select ASF grant check box when attaching patch to the jira


h2. How to Generate a One-File-Patch Via Throw-Away Branch

here is one way to generate squash of your commits:

[http://stackoverflow.com/questions/616556/how-do-you-squash-commits-into-one-patch-with-git-format-patch]

{code}

#
# 'archon' referers to karaf mirror
# 'origin' referers to your own fork
#

# attach karaf mirror as remote, if not done yet
git remote add archon https://github.com/apache/karaf

# fetch latest karaf mirror
git fetch archon 

# ensure you are on your fork trunk
git checkout origin/trunk

# kill previous patch delivery, if you had one
git branch -D delivery

# make new delivery throw-away branch, based on latest karaf mirror
git branch delivery archon/trunk

# use it
git checkout delivery

# squash all your local development into a single commit
git merge --squash trunk

# commit it to the delivery branch
git commit -m "delivery"

# generate a patch file against the mirror
git format-patch archon/trunk

{code}

root of your karaf source now contains a file named "0001-delivery.patch.txt" (please attach the .txt ending;this will allow commiters to open your patch directly in the browser and give it a short look there) which you should attach to your karaf jira, and ask to commit to the svn trunk
