Wednesday, January 19, 2011

git push dropbox

Git is great and Dropbox is awesome and recently I found a way to combine the two.

I host my open source projects on github (as well as bitbucket – I'm a happy Mercurial user as well) but there are some private and/or client projects I don't want to store on those sites.

Git, of course, doesn't require a server repository. So you can work locally while still having full version control. However, I like the comfort of syncing to an offsite repository so I tend to push my changes to the remote server multiple times per day (also, old svn habits die hard).

For git repositories that I don't want hosted on github, I push to a git repository sitting in Dropbox instead. The push is handled locally and Dropbox performs all the magic of syncing to the cloud (my offsite backup) and to my other computers/devices (switching dev computers isn't a problem). Simple, fast, nice.

Here's how I set up a bare git repository in Dropbox for a project:

$ mkdir ~/Dropbox/src/git-server

$ git init ~/Dropbox/src/git-server/MyProject

$ cd ~/Dropbox/src/git-server/MyProject

$ git config --bool core.bare true

$ cd ~/src/project-git

$ git status

# On branch master

nothing to commit (working directory clean)

$ git push --mirror ~/Dropbox/src/git-server/MyProject

$ git remote add dropbox ~/Dropbox/src/git-server/MyProject

$ git push --mirror dropbox

Everything up-to-date

The first batch of commands initialises a new git repository. The repository is flagged as bare so that we can push all branches (including the working branch).

The second batch simply pushes a development repository to the Dropbox one. I use --mirror to push everything over.

The third batch of commands set up a shortcut for the Dropbox repository. I name it "dropbox" so from then on I only have to do "git push dropbox" to push to it (with or without --mirror as required, although I usually use it).