Inform and Act

Read our official statements regarding recent executive orders and find resources to help you take action. Learn more

GitHub Rebase #15

Sorry I missed last week, hopefully I can get this out weekly from now on. As always, check out this guide to see what you can do to help your chances of getting noticed. Stats are on hold until next week until I figure out how to not make Octocat cry too much.

Featured Project

keywurl adds a keyword-based search to your Safari address bar. It also makes it easy to add your own commands for sites you want to search often. For instance, you could make a gh keyword that searches GitHub repositories instead of relying on the search bar or being on the site itself. Of course, it’s in Objective-C, and all the source is available if you want to see how plugins for Safari work. alexstaubo has even wrapped up some DMGs for easy installation along with a nice project site as well. This is a ridiculously useful tool for any OSX/Safari user, so check it out!

Notably New Projects

whenever provides a really easy way to write tasks that must be done repeatedly or at a certain time in a simple Ruby DSL. It can even write out crontab files for you based on the commands and times that you give it. Take a look at some examples of the syntax on the project’s wiki.

lawnelephant applies Seinfeld to websites: it’s a web application that does nothing! Well, really, it does so some stuff, and you can even suggest and vote on features that should be built in. What’s really crazy is that it’s all implemented in Scheme. Who knew feature creep could breed an entire website (on purpose)? It’s live at if you want to see it in action.

burst is for those who don’t like Flash and would rather use the Canvas element with some jQuery style chaining and callbacks. The goal of the project is to provide a layer-based animation system (like After Effects) that is easy to build great looking sites with. It’s got a decent start on documentation and it even has an awesome demo/home page. If you’re looking for alternatives to Flash or are willing to contribute to something that may prove useful to plenty of web developers, get forking! (Also, ASCII art in READMEs always rules.)

Perl Mirror on GitHub

For those of you who had not heard, Perl has moved its 20 year source code history for Perl 5 from Perforce to Git (also, the bird is in fact the word).

At the request of the Perl Git transition team, we’ve setup a mirror of the main repository here on GitHub for Perl developers to fork should they prefer collaborating on GitHub. It is automatically updated every hour, so fork away.

Also, as a little background – our friend Sam Vilain, whom we met and had a few beers with at GitTogether 2008, has completed a heroic job of moving the Perl source code over.

From the Use Perl article:

He spent more than a year building
custom tools to transform 21 years of Perl history into the first
ever unified repository of every single change to Perl. In addition
to changes from Perforce, Sam patched together a comprehensive view
of Perl’s history incorporating publicly available snapshot releases,
changes from historical mailing list archives and patch sets recovered
from the hard drives of previous Perl release engineers.


Holiday Shirt Super Sale!

Super Shirt Sale!

As a special holiday treat, we’re putting all of our remaining shirt stock on sale. You can now get Fork You for $18.00 USD and All Your Rebase for $16.00 USD. We ship to most places worldwide. Grab one while supplies last. Once these are all gone, we’ll be printing up some new shirt designs!

fork you fork you

New Create/Delete Events

You’ve created a repo on GitHub, written a bunch of great code, and now it’s time to push it:

Here’s what happens on GitHub now:

Along with the create events, if you have any service hooks setup, we will pipe one commit to them so others will be notified of the new branch or tag creation. We’ve also added delete events if you remotely delete a branch or tag.

This isn’t the second big feature launch Scott mentioned in his Fork Queue post yesterday (stay tuned about that), but we’re still pretty happy about these additions.

Traffic Graphs

We all love stats and graphs, and I especially love bringing them to you. So without further ado I present the long asked for traffic graph for each and every repo on the site. Simply go to the Graphs tab and select the Traffic graph. We’re making the pageview numbers for the last 90 days available to YOU!

Fast Forward Your Fork

Since forking a repository is so easy on GitHub, a number of people tend to do it thinking they want to play with the source, but then never actually push back into their fork. Meanwhile, development continues on the main branch, and it’s a little annoying to have to add them as a remote and merge in order to get back up to date. So, we’ve added a new button to your repository details that will show up if you forked a project, didn’t push to it, and the source repo has moved on:

If you click on ‘Fast Forward’, it will move all your branches up to wherever the repository you originally forked from now is. Now all of those of you who forked Rails months ago and never did anything with it and are thinking of trying again, go forth and Fast Forward.

SproutCore 1.0

SproutCore 1.0 has been released! Check out the new CoreQuery which is the first step to making SproutCore JS-library agnostic.

If you don’t know what SproutCore is, head over to the demos and have a gander. Or check out the GitHub repo.

Congrats guys!

Git on Windows (again)

Another good Git on Windows blog post. Don’t forgot about our Guide, either!

Google Code Search Crawls GitHub

Google Code Search now supports GitHub.

From the announcement:

For Git, we now crawl repositories hosted by several public git hosting sites including GitHub and In addition to that, we also crawl Android, Chromium and Linux code.

YUI on GitHub

That’s right! As mentioned in their YUIDoc announcement, Yahoo’s User Interface Library is now hosted publicly on GitHub at

Be sure to check out the brand new YUILibrary and YUIDoc, as well as davglass’ github-trac plugin. Welcome, guys!

Update Oh yeah, don’t miss their Git FAQ – it’s top notch.

Insider Guide to GitHub Series

A few months ago I started talking with the Pragmatic Programmers about doing some screencasts. At the time, I was doing the GitCasts series and was considering branching out into other stuff and the Programmers just started their screencasting wing.

Mike there thought it might be a good idea for me to do a couple screencasts about GitHub itself. I was not working for GitHub when I started these, but I knew the website well and had done some little things for them (like Gist). When I started working at GitHub full time, everything got crazy and the project took a while to complete. However, today Pragmatic Programmers released two episodes of the “”">Insider Guide to GitHub"

which cover most common things people do with GitHub. The first episode (30 min) is completely free, so please encourage your friends to watch it if you find it helpful. It covers how to :

  • clone a public project
  • create a new account
  • generate an SSH key
  • import an existing Subversion repository
  • create a new repository
  • fork a repository
  • push changes to a repository
  • create a private repository
  • add collaborators to a private project
  • clone a sub-module
  • collaborate with other users
  • send a pull request
  • merge changes from a pull request
  • watch projects and people
  • use project wikis
  • generate RubyGems
  • allow project donations

The second episode is $5, and goes into more advanced stuff like the GitHub gem, the APIs and post-receive stuff, an example Capistrano deployment and a few other things.

Mike Clark edited them all and did all the graphics, which is why they look so nice. He spent a ton of time on these for me, including the free one and I think it was super cool of them to let me give away the first one for free.

If you want to see me do a screencast explaining other things about Git or GitHub, let me know and I’ll get a third episode out there if I get enough suggestions.

Sound in the Cloud

Everything else is on the web, why not your music player?

Oh and look, the code’s on GitHub.

More DB Optimizations

Thanks to the pros at Engine Yard for helping us optimize more of our database queries. With a small team like ours, their support really makes a tangible difference.


Git Ist Schnell!

I wanted to follow up on the WhyGitIsBetterThanX project that I basically stopped working on the day it went live and am now spending a few minutes a day maintaining.

Basically what happened almost as soon as the website went live is that people saw that the source was on GitHub and began forking it to translate it. Thanks to these unsolicited volunteer translators, we currently have seven translations in addition to English -
Swedish (partial) and
Traditional Chinese.



There are a couple of interesting lessons here. First off – the branching model in Git is very good for keeping translations of things. How the process basically works is that someone will fork my master branch (English version) and translate it and send a pull request to me. Then I’ll review it, create a branch name (ie: ‘de’ for German) fetch their remotes (‘gh network fetch’) and merge their branch in. Then I add the subdomain to my webserver, edit the upload script in that branch to upload to that directory and we’re done. It takes about 5 minutes to setup a new domain.

This is the cool part. People will fork and change the main English site (fix spelin errs, or grammar or make it XHTML valid, say…) and push that and send me a pull request for that. Then I’ll merge that in and push out an update for the main site. Then the translators will often merge that back into their translated branch, resolve any conflicts and send me another pull request, which I can often just fast forward.

This means that I’m able to maintain a pretty fair amount of patch work not only on my main site, but on all 8 branches simultaneously and it literally takes me maybe a few minutes each morning. Git, GitHub and the github gem make this process so easy I feel sadness for people who have to actually accept patchfiles still. There is absolutely no way I would do this if I had to download patchfiles from email or had to deal with 8 directories (which is how you would have to do it in bzr or hg).

I put the site live December 1 and in the 4 days since then I’ve merged in about 120 change-sets from 23 different contributors to 8 separately maintained branches without ever getting confused and without ever spending more than maybe 10 or 15 minutes a day on it. Once again, those numbers are :

  • 4 days
  • 120 patches
  • 23 contributors
  • 8 separate branches
  • 10 minutes a day
  • 0 problems

If you are the maintainer for a project, I would highly recommend thinking about changing your patch-submission workflow to forks on GitHub (and not just because I work here).

Smooth Support Logins

Now when you log in to GitHub and visit the support site, you’ll be automatically logged in. No account? No worries – one will be automatically created.

Nice and smooth.