Applied online to GitHub career site. 2 days later I was e-mailed two open ended technical questions requiring 0.5 to 1 page responses. After that there were 3 technical interviews (video chat) approximately one week apart. One of these involved poking around on a Linux box in a shared SSH session.
The on-site interview consisted of behavioral questions ("tell me about a time when...") with recruiter, CTO, managers, and team; lunch with a manager and a lead from two teams I was considering; and one technical session with 2 GitHubbers where I was given a computer and ultimately wrote up a pull request to achieve a prescribed task. The day ended with an impromptu video chat with a third manager that was arranged while I was walking back to the hotel. I was actually interviewing for spots on multiple teams, and these teams worked together well -- I took this collaboration as a very positive sign for how the job would go. Two business days after the interview I was asked to make a final decision on which team I wanted to join, and then I received the offer.
The travel to HQ in San Francisco was reasonable and worked around my commitments to my existing job and my personal schedule. The airfare, hotel, and ground transportation to and from the airport in San Francisco were paid directly by GitHub. The reimbursement for incidental expenses like meals and parking was prompt and complete, and I even got to pick an Octocat T-shirt upon departure.