The Programming Butler

hacking life with a servants heart

Assimilating Contributed Code

This year I authored several RubyGems and just this week finally learned how to work with a contributor.

UPDATE: @bryckbost points out that the github-gem does exactly what I wanted to do. See the Fetching and Evaluating Downstream Changes section of the README.

Of course GitHub has the great Merge pull request option when an auto-merge is possible, and I use that quite often, but the workflow on OSS projects sometimes requires you to run the tests locally and make any modifications before merging it.

A quick search didn’t turn up any easy to read instructions, and I’m no git guru, so it took me a few minutes to figure out a simple workflow.

Here is how I checked out, tested, modified, and merged a massive pull request for Ghee from Ryan Rauh this week.

1. Clone my repo and create a feature branch

git clone git@github.com:jonmagic/ghee.git
cd ghee
git checkout -b repos_support master

This creates a new branch called repos_support, based off of master, and checks it out.

2. Pull contributors code into your local branch

git pull https://github.com/rauhryan/ghee.git repos_support

This pulls the repos_support branch from the remote repo and merges it into the branch you have checked out (which we also called repos_support).

3. Run tests, make modifications, commit changes

bundle exec rake
touch OHNOES.txt
git add OHNOES.txt
git commit -m "Added OHNOES"

4. Checkout master, merge feature branch, push

git checkout master
git merge repos_support
git push

Conclusion

This workflow follows the kiss principle, so it worked quite well for me.

Please give me feedback. I would love to hear about how other people accomplish this task, so I encourage you to leave links/tips/tricks in the comments below.

Also be sure to checkout Ryan’s awesome work on Ghee, a simple ruby client for the GitHub API V3.

posted December 30, 2011 by Hoyt