What Is GitHub & How Can It Benefit Your Development Team?

GitHub and services like it, such as BitBucket, GitLab or Gitorious use git. Git is a distributed version control system written by the creator of Linux, Linus Torvalds, after he got frustrated with proprietary software. Git is similar to other version control systems such as subversion or CVS, but it's distributed. What this means is that if you clone a git project, you have the entire project history. You can commit, branch and tag all on you local machine without interacting with a server at all. If you were working with subversion or another centralized VCS all of your interactions occur with the server.


Github icon image.

GitHub and similar services bring all of the benefits of a decentralized VCS to a centralized service. GitHub also stores a copy of your project's repository just like any other developer. Then, you basically designate that as the project's central repository and all the developers push and pull their changes to and from that repository. GitHub takes this a step further by encouraging developers to fork a project's repository and then use that as their own centralized repository. From there they can send "pull requests" to the main project with their changes and then the project maintainers can review them before deciding whether to include them in their project or not.


So what are the three best reasons to use GitHub?


1. It makes it easy to contribute to your favorite open source projects

Today, nearly every open-source project uses GitHub to manage their project. GitHub is free if your project is open source and includes a wiki and issue tracker that make it easy to include more in-depth documentation and get feedback about your project. Symfony, Ruby on Rails, and Django all use GitHub (symfony, rails, django) to develop their project and accept contributions from the community. Even the GitLab source is available at GitHub! If you want to contribute, you just fork their project, make your changes and then send them a pull request using the GitHub web interface.

Interestingly, Drupal doesn't utilize GitHub (they host their own central git repository). Their main repository is mirrored on GitHub, but their process for contributing is a little bit different, both for core and for modules which are also all git repositories. You can still use git, but you need to send patches directly to their issue tracker.


2. Markdown

Markdown is a way to write formatted documents using nothing more than a text editor. In fact, I wrote this post in markdown! And GitHub has turned everything into markdown: issue tracker, the wiki, comments, everything. Since we're already writing our READMEs and other documentation for the project in markdown so that it can be tracked easier using version control, it only makes it easier that we don't have to learn another system for formatting on other parts of the website.

GitHub uses what they call "GitHub flavored markdown", which makes a few changes to standard markdown which makes it more useful in a programming environment. Note that the other services also support markdown or have their own, similar flavored markdown.


3. Documentation

GitHub has excellent documentation. Their help section and guides have articles for nearly any topic related to git that you can think of. Need to know how to generate SSH keys? They have an article. Wondering about a good git workflow? They have a guide. If you're looking for a sample gitignore for your next project they have many samples for nearly anything you can think of. Are they missing one? You can fork their gitignore repository, add it and contribute it back!


Honorable Mention: Gists

GitHub introduced a feature some time ago, called gists, that allows you to turn one or more files into a git repository. Gists make it easy to share and track changes to configuration files or simple scripts. They aren't as feature-rich as a full-fledged GitHub repository; there isn't a wiki or issue tracker or many of the other features that make GitHub such a good tool. There are comments and you can make the gist private or public, even if you don't have a paid GitHub account.


Mention: GitHub pages


Using GitHub pages it's possible to create and host a static website for your project by simply commiting html pages to a separate repository like you would with any other git repository. Using pages, you can easily start blogging, write additional documentation for your project, or give it a web-presence it wouldn't otherwise have.

Does your team use GitHub? We here at Unleashed use GitLab because it allows us to use our own servers while still having a GitHub-like experience. What other collaboration tools do you use instead of or in addition?