You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

This page is meant to document the various steps to working with git to contribute or review Kafka code. There are probably a lot of bugs in these steps or possible better recipes, so help make this page better.

Simple 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, xyz:
1. Checkout a new repository:

  git clone https://git-wip-us.apache.org/repos/asf/kafka.git kafka

Or if you already have a copy of the repository, just check for updates

  git fetch

2. Create and checkout a feature branch to work in:

  git checkout -b xyz remotes/origin/trunk

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

  git commit -a

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

  git fetch
  git rebase trunk

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

  git format-patch trunk --stdout > xyz-v1.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:

git config --global user.name "Palmer Eldritch"
git config --global user.email "peldritch@layoutsinc.com"

Reviewer workflow:

This assumes you already have a copy of the repository.
1. Make sure your code is up-to-date:

  git fetch

2. Checkout the destination branch:

  git checkout trunk

3. See what the patch will do:

  git apply --stat xyz-v1.patch

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

  git apply --check xyz-v1.patch

6. Apply the patch to trunk

  git am --signoff < xyz-v1.patch

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

  git reset --hard HEAD
  git clean

8. Push the change back to Apache:

  git push origin trunk

Simple Contributor 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 directly from your feature branch:
1. Merge the change to trunk:

git checkout trunk
git merge xyz

3. Validate the change by running tests, checking the diff, etc.
3. Push the change to the official Apache repository

git push origin trunk

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. Checkout kafka (if you haven't already) onto your local machine:

  git clone https://git-wip-us.apache.org/repos/asf/kafka.git kafka

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/kafka repo (https://github.com/apache/kafka) which creates a repo https://github.com/jkreps/kafka (where jkreps would be your user name).
3. Add an alias on your local repository to github to avoid typing:

  git remotes add github https://github.com/<your_user>/kafka.git
Doing Work

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

  git checkout -b xyz remotes/origin/trunk

2. To save your branch to your github repo do

  git push github xyz

3. Maybe you need to work from multiple machines. To update your other machine with changes you have pushed to github do:

  git fetch github
  git checkout xyz
  git merge remotes/github/xyz
  • No labels