What the GIT!
Considering that I've been developing sites on the Drupal platform for two years, you would assume that I would know how Git on Drupal.org works. Well, your first reaction would be wrong. I am a designer first, and a developer last. So far last in fact that I didn't even signup for a Git account on Drupal.org until last weekend.
Study the Documentation
Right after I set up my account I was chomping at the bit to get my code submitted to my project repository and get everything rolled out for a new theme that I was developing. Most of the themes I have developed for clients in the past few years have been custom one off solutions so there was no way I was going to submit a previous clients site theme to Drupal.org. And considering I have been working on a CSS framework for the past few weeks I wanted to turn it into a theme and finally submit it to the Drupal repository. Completely easier said, than done. After reading through all the documentation and setting up my account, the Terminal commands were starting to drive me a little nuts. Why can't this be easier? I love visual representations that my code is up, and that it has been submitted correctly.
Recently I started using the app for Github.com, which is Github for Mac. A great little tool. Simple interface that lists my repositories in one place, its visual, and there are "buttons"! No idea how happy it makes me feel to see an application for Git, or Subversion systems that actually have simple interfaces. Push, Pull, Commit, or Update. What more could a designer like me ask for?
Apps to the Rescue
So in my search I came across two apps for the Mac. There are probably many more apps than I found, or for this post could test. If you have any that you like particulary more than these two I would like to know about them, because I am always looking for something that works a little better, and a little easier.
Tower – $59
Tower was created by fournova
Tower is an elegant app, beautifully designed and packed full of features. As a designer I can appreciate the effort that developers put into designing an interface that works as expected. Installing Tower is relatively straight forward and it even gives you the option of adding in your Github or Beanstalk account if you use those applications already, which definitely speeds up the process. Before even checking out your repositories you'll notice that you have access to create a new Github or Beanstalk repo right from the interface. Handy.
Cloning a repo was simple too, since there is a rather large button off to the left that says "Clone Remote Repository". Enter your http address, local folder, and hit Save. Now that you have cloned your repo you can go to work. This works the same across the Git on Drupal, and Github. There is not much difference. As long as you have the repo url Tower will fill in the blanks. From there you can edit your files directly in your favorite editor, and Tower keeps track of the changes. You can watch the two-minute demo on their website for basic information about how the app works. You can stage changes, then commit them later in batches. Though the cool features come about when you start dragging branches together to merge, and saving "stashes." This was actually one of my favorite features, because I have often been in the middle of a change but didn't want to commit it until I had a chance to test it. You can save a group of changed files in a "stash" and then restore the changes later by dragging the stash onto the branch that you want to add it to.
The left sidebar is really easy to follow and even gives you a branch tree to follow how your repo is laid out. Plus combining branches together is as easy as dragging on top of the other. The main window is utilized for actually displaying the changes to your files. You will notice that you cannot see your files in the Browse window, which I found a bit annoying, though I suppose that the only thing you should see is updates, not all your files. The History tab comes with two types of listings, recent and list. Recent gives you a graphical view of the changes made, where as list view looks similar to an email client. I preferred the list view, because it shows the tracked changes for each one of your files for each commit. The only feature I could not get to work was the update to let me know that changes had occurred to the repository, not sure why it wouldn't sync, but I know there were several changes that it did not pick up during my initial tests.
Overall, Tower is a full featured application to handle Git repositories. Given that it is $59 dollars for the application it is a bit pricey, but the added bonuses on what the app can actually do seem quite worth the price. The history section of the app was by far my favorite feature, which was beautifully laid out to give the user maximum visibility of branches and changes to individual files that I can track easily. Also, the "stash" option was very interesting, and especially useful for developers who get pulled off one project and need to save their work without messing up the repository or accidentally committing the wrong files. Tower is definitely a beautiful app, and great for users who are well-versed in Git, or for newbies. If you're a student they also offer a 50% off discount.
Gitbox – $39
Gitbox was developed by Oleg Andreev
First, thing to notice about Gitbox is the interface or lack of an interface. This could be a turn-off for some, but for others the lack of buttons, and menus might be a strength. When you start Gitbox for the first time you'll notice that you have "one button", a plus sign. This is how you check out your repos. Simple. Then you enter the http address to your repo, or if you're using Drupal's Git, then you enter in the git url. There isn't really a lot to have to configure from there, and Gitbox is ready to start tracking and pushing your commits. I tend to use text based editors for the majority of the code that I work on, and so I can pretty much use my favorite editor, such as Coda, TextWrangler, Expresso, or Dreamweaver (for you Adobe fans out there).
Once you make a change a number will appear next to the repo identifying the number of files that have either been created or changed. Gitbox's basic features are consisten with Git in that there is a staging platform for your changes, and then you can commit the changes to the repo. I have always wanted to jump the gun on this, and commit things right from the change, but in using Github I realize this is better. When you submit a change in Gitbox to stage for commit, there is a checkbox next to the file. You can also alternatively update certain files at one time, and then come back and commit later changes in other files so that you can keep your commits together by feature or area updates. You have to enter a log comment for the change, which is conveniently located above the file listing. Once you stage a change, the commit log in the middle of the screen will have a green dot next to the most recent addition that has not been committed. Simply select the one with the green dot and then hit "push ->" in the top of the screen.
This does not really work in reverse that at least I could tell. I basically made a change outside of the app, and then tried to see if it automatically updated with an indicator. Nothing happened. Though when I hit the pull button I got all the updates I was looking for. Could be an issue if you work with maintainers on your code, because you may not necessary always remember to hit that button to make sure you are up-to-date. Suppose I could think of it like the perpetual save, save, and save keystroke I have learned. It actually has become second nature for me to hit save on my keyboard so many times that the lettering on the keys has faded.
Given my brief, and sorted experience with Git, and with Gitbox I actually like the clean and simple interface. It is less obtrusive than many of the applications I have used in the past, and it is intuitive (that is if you are familiar with how Git versioning works). The added bonus of being able to combine my repos into groups is an added plus, because I can keep my accounts together in Gitbox, but also have them saved in varying locations on my local machines without having to hunt for them later when I forget where I am storing the files. I would recommend Gitbox for anyone wanting to understand how Git works, as well as, for power users who want nothing more than the simple commands in Terminal they are used to with buttons, instead of hand typed commands. The added bonus is that you can use Gitbox for free if you have 3 or less repositories to manage, and if your a student you can get a 50% discount.
SmartGit – $69
Created by Syntevo Software Development
What is nice about this tool is that it works for both Mac and Windows, plus as an added bonus it actually has a free option for non-commercial use, which is handy when you're developing something that is meant to be open-source. It provides integration for not only Git, but has built-in SVN support.
The nice thing about the interface is that it shows me all the files in my repo up front. This could be a problem if it was hard to see the changes, but changed files are given a red color, and appear on the top of the list. Plus the changes are recursive so depending on the folder you may only see the changes from the parent folder down through it's children. You can see all changes to the repo by simly selecting the parent folder of the entire repo. This is similar to many SVN clients that I've used in the past so this functionality is familiar for anyone who has used those types of repo applications.
When pushing files in SmartGit to a specific branch it couldn't be easier than actually selecting the branch you want to commit to and hitting the rebase button. Another nice feature is the ability to set a master password that can access store all of your passphrases for all your repos. Better to remember one thing rather than ten. The graphical interface for commit history by other authors is a nice touch, which allows you to see faces of co-maintainers rather then their username, which at times for me can be difficult to remember who is who.
Given the fact that SmartGit is free for non-commercial use is a plus since I know most people don't have the money to spend on applications, and free can be just as good as a paid solution. This is definitely an option for newbies and pros, so no worries about the learning curve, though considering I didn't actually install this on a windows machine I cannot vouch for that, but I will say that it is quick and responsive.
In the End
In the end, I like the simplicity of Gitbox, and the price sounds great. Though the added bonuses that come with Tower are worth the extra $20 dollars, plus the interface is clean and easy to work with. A few of the features for Tower may take some getting used to, but then again so do learning Terminal commands for Git. All in all I would use all these apps, but for me I would have lean towards Tower in the end simply because of the way I can merge and view history logs much more cleanly. The aded bonus of the interface design is another win. Though if you are looking to not spending a lot of money, then SmartGit is a great win. It packs many of the features with a different interface.
I will be keeping this post open for updates as I start playing with Tower, and the other tools more to see what fits best. I have a lot of different machines I uses throughout the week depending on my mood and I have each one geared with a different tool to see which one performs better.
However, my next theme release to Drupal.org will be made with Tower so stay tuned to see how the Git Apps stack up against one another in a real-world test.
These were only three Git applications that I reviewed, and I would be interested to know your own takes on these applications and others that are out there.
Taxonomy: GitDrupalTowerGitboxPlanet Drupal