GitHub has established itself as the premier place for developers to show off and share their programs. Unfortunately for Windows users, most of its focus has been on Unix and Unix-alike platforms. This is not surprising given that it is based on the Git distributed version control system, written by Linus Torvalds to coordinate development of Linux. The fine folks at GitHub have been remedying this by improving coordination with Windows. This includes providing a free desktop Git client for Windows, the focus of this review.
Getting GitHub for Windows
GitHub offers the Windows client for free and you can get it by clicking on the download link at the top right corner of the project page. The current release, as of this writing, is 1.0.41. The interface owes a lot to the flat color schemes inspired by Windows 8. This may throw off those who use it on Windows XP, Vista, or 7.
Although the developers state that you can use the Windows client without using GitHub, nevertheless it has been optimized for GitHub, so I will focus on that use case in this review.
The leftmost pane of the program subdivides your repositories between those that you only have in your GitHub account and those that are in your GitHub account as well as locally mirrored. Clicking on your user account will show you the former (i.e., all of your GitHub repositories).
Clicking on the “local” icon will display those repositories for which you also have a working directory (i.e., local clones).
There are two ways to view the state of the working copy of your local repository. You can right click on a repository and choose “open,” or you can click on the little blue arrow to the right of the repository name. If your repository has uncommitted changes, then the client will look something like this:
Enter the commit message, click on the commit button, and, if there no problems with the commit, the program will show a success screen that looks like this:
Don’t forget to sync your local repository with the origin by clicking on the highlighted blue circle arrows at the top center of the window. A blue bar will indicate the progress of the sync and, assuming that there are no problems syncing, the window will show the recent activity of your working copy.
One very visible way that GitHub has been accomodating the Windows platform is the addition of a “Clone in Windows” button to project pages on GitHub. This button is above the branch indicator on the home page of each project. Clicking on that button will clone that repository to your GitHub directory in the Documents folder of your local personal computer. The Windows client will detect the new repository and show it in the main window.
By default, repositories are cloned using secure HTTP (i.e., HTTPS) so you can be sure that the files haven’t been tampered with. Furthermore, you need to have a GitHub account in order to clone GitHub repositories to begin with, which means generating SSH keys and other login credentials. The GitHub for Windows client caches these credentials so that you don’t have to re-enter them every time you have to make a commit.
Aside from going to the GitHub website, the GitHub client itself supports adding repositories by means of drag & drop.
Branching is an important feature of Git. In Git, branches are moveable pointers that point to a particular commit. This encourages a workflow where branches are frequently made and merged. This is a big difference from many earlier version control systems, where creating a new branch was a big deal.
To deal with branches, click on the branch icon between the sync icon and settings icon at the top center of the program window. It will be called “master” because that’s the default branch in any repository. You will see a box pop up showing the name of the current branch and a command line to either filter the names of other branches or create a new branch.
The “manage” button above the command line opens a window that allows you to merge branches. Drag the branches that you want to merge to the open slots at the bottom of the window. Then, click on the “merge” button.
Even though the GitHub client for Windows is optimized for use with ones GitHub account, the developers claim that it can be used with other remote Git repositories. It cannot, however, be used with more than one remote repository at the same time. For small projects, this should not be a concern. It’s more of a concern for large projects.
For example, a hundred developers making commits to the same repository on the same day can get out of hand. One possible workflow that distributed version control systems make possible is to divide the mass of developers into teams. Each team has its own remote repository. The team leads then push cleaned up features and bug fixes to the project lead, whose job it is to maintain the principal project repository. Each team would access the contributions of other teams by having their team lead make a pull request from the repository of the project lead. The rank-level developers would then pull from their team repository to their working repository and, finally, their own working copy. Optionally, they could do a pull from the respective repository directly.
Since the above workflow requires multiple remote repositories, then GitHub for Windows can’t help. Again, this should only be an issue for very large projects and the majority of open source projects aren’t large enough to warrant such an organization.
Although GitHub for Windows is easy to use, it is not a full-featured Git client. The developers admit that the command line is indispensable for certain use cases. For instance, to get around the limit of only one remote repository, described in the previous section, one must use the command line. In fact, aside from the user interface, GitHub for Windows really doesn’t offer much that the Git command line doesn’t already have. I get the sense that the GitHub developers aren’t eating their own dogfood when it comes to GitHub for Windows.
Those who want to leave the command line behind and gain features in the bargain should look at third-party tools like SmartGit/Hg, which I reviewed last month. Pay particular attention to its diff tool and its facility for helping to edit .gitignore files. Admittedly, GitHub for Windows has a nicer user interface.
The price can’t be beaten, the user interface is as beautiful as it is functional and GitHub integration is trivial. That last point is the most significant thing about GitHub for Windows. It shows that not everyone wants Windows users to be second-class citizens in the open source world, and the fine folks at GitHub are among those working to make cooperation possible.
This Git client with GitHub support has excellent design and ease of use but basic features. Go for a more advanced Git client or stick to the command line if you're in a professional environment. If you're hacking for fun, then this is worth trying.6