I am fairly certain I was one of the earliest adopter of Dropbox. I loved the simplicity of the application and the free version provided a generous amount of disk space (2GB). I used it religiously, recommended it to friends, and was ready to drop down to the terminal to create symlinks to get over Dropbox’s one big weakness: it’s crippling need for all sync’ed files to be rooted under a single directory.
Then things started falling apart.
Dropbox claims to “auto-detect proxy settings” but it does nothing of that sort. A well behaved Mac app should obtain proxy settings from the system wide preferences. Dropbox seems to pick them out of /dev/random. Sometimes the Dropbox menubar carton spins in vain trying to connect. At other times the app pops up a helpful warning that the proxy settings are incorrect – those are the times when it actually does manage to connect.
Then there are the endless warnings about lack of permissions for certain files and the mysterious “directory_not_empty”. The hundreds of files named “original-name-conflicted-copy…”. This was getting unreliable. And Dropbox support showed little interest in dealing with pesky old me.
So I stopped using Dropbox.
But of course the problem it is intended to solve didn’t disappear. What next? SugarSync, Windows Mesh (or is Live Mesh? Or Live Sync?)? The search was fatiguing and fruitless. Then one day, while I was pushing my code to GitHub so I could work on it on my other computer, something stirred in my feeble mind. Here’s a tool that works everywhere (including through SSH proxies), is explicitly crafted for resolving conflicts between versions of files, supports pulling and pushing across multiple computers, can exchange files over many different transports, and can be hosted on any system that has an SSH server on it.
So, this then is my new plan. Getting a Dropbox replacement together using a hosting provider and Git. I would tell Git which files I wanted to sync and which not, and that would just work. Using Git would even let me add comments to changes I made to files. I would use GitX or equivalent to merge conflicting changes. The only thing left was to find a way to to automatically push and pull changed files or at least notify me of the need to do so. Git (or the ‘find’ command) can tell me when a file has changed, so push prompting would only need a UI. A UI would also be needed to prompt me to pull changes. And for that there is Growl.
Gadzooks! I think this can be done.