This is the exact reason why github is simply awesome, it makes forking projects just super simple and submitting changes even easier.
First thing, you need to have a github account, if you don’t have one yet, email me, I have a couple of invitations left, otherwise, just wait until github gets public.
Now, let’s go to Merb’s repository and fork Merb-core by clicking on the fork button.
Actually, for this example, I’ll fork merb-plugins because I want to improve the ActiveRecord rake tasks.
Because I forked merb-plugins, I now have my own forked repo: !
I’ll start by checking out/cloning my forked repo locally.
<tt> </tt> git clone git<span class="iv">@github</span>.com<span class="sy">:mattetti</span>/merb-plugins.git
Great I can now make my own changes…. but wait, what if the merb core team makes a change to the code? Well, I need to track their changes. Here is how:
<tt> </tt> git remote add coreteam git<span class="sy">:/</span>/github.com/wycats/merb-plugins.git
FYI, it adds the following to edit .git/config:
1<tt> </tt>2<tt> </tt>3<tt> </tt>4<tt> </tt> <tt> </tt> [remote <span class="s"><span class="dl">"</span><span class="k">coreteam</span><span class="dl">"</span></span>]<tt> </tt> url = git<span class="sy">:/</span>/github.com/wycats/merb-plugins.git<tt> </tt> fetch = +refs/heads/*<span class="sy">:refs</span>/remotes/coreteam/*<tt> </tt>
<tt> </tt> git fetch coreteam
<tt> </tt> git checkout -b coreteam coreteam/master
You can now track the latest change and merge them with your branch. Note that you can also track other forks and merge some other changes. (just that feature is worth using git)
Alright, now you can do your stuff, and push your local change to your remote repo at github.
Once you are done, you can simply click on the “pull request button”
fill up the form and select the recipient. (wycats in this example if you want him to merge your changes into the official version of Merb).
p.s: The github guys are working on a gem to make our loves easier, give http://github.com/defunkt/github-gem/tree/master a try. I’ll post about the gem when it will be a bit more stable.