Collaborating with GitHub and Dropbox

Git and GitHub are awesome tools for developers. Version control systems have been used for quite some time and for good reasons. Git, its distributed approach and GitHub’s social coding features like pull requests for instance have introduced a whole new dimension to collaborative software development.

However, when working with non-coders (e.g. graphic designers) on projects using Git for managing source files like CSS and JavaScript assets that have to be touched by both developers and web designers can prove to be difficult. Many non-coders shrink back from using command-line interfaces and rightly so. While those usually are very amenable to coders because they allow you to get common development tasks done quickly they more often than not seem downright arcane to users who spend most of their time in graphical user interfaces. To them using Git / GitHub and all its branching, merging and occasional conflict stuff creates additional friction that distracts them from their actual work.

Having worked together with a web designer on a project recently I came up with a small solution involving Dropbox. Using Dropbox is as easy as using normal file management tools like Finder or Windows Explorer and it allows you to easily share specific folders. Problem is, Dropbox lacks features of version control systems like source code history and branches. This is perfectly alright since Dropbox isn’t supposed to be a version control system in the first place.

So, I combined the ease-of-use of Dropbox with Git’s version control features by simply checking out my Git repository from Github as usual, however placing it in my Dropbox folder so I could synchronize and share it with the project’s web designer. As soon has he makes changes to files those are synchronized with my Dropbox folder and all I have to do is commit and push them back to the Github repository.

Because I didn’t want Dropbox meta files to show up in the repository I added the following lines to the project’s .gitignore file: