Friday, March 4, 2011

git sharing with dropbox

I recently posted about using Dropbox as a git server: git push dropbox.  I have since refined this process as I became more familiar with git and fine tuned my development workflow. So here's an update on how I now use Dropbox to both share and backup my git repositories.

(note: in the examples below "$" is the bash prompt; all commands are entered in the OS X Terminal. I'm very much an old school UNIX command-line guy! However, on other platforms, all commands will be possible from your favourite git client.)

Initialise a git repository for Project, if one does not already exist:

  $ cd Project
  $ git init .
  $ git commit

Create a git server repository in Dropbox.  It is initialised as "bare" which means it won't hold a working copy of the repository. It is a shared repository only.
  $ mkdir ~/Dropbox/git-server/Project.git
  $ git init --bare  ~/Dropbox/git-server/Project.git

In the local repository, add the Dropbox repository as the remote origin then push the current branch up to it.

  $ git remote add origin ~/Dropbox/git-server/Project.git
  $ git push origin master

That's all there is to sharing and backing up your project repository.  Whenever you need to (I generally do it after every commit) you can "git push origin master" again to update the Dropbox repository.

On another computer, to clone a copy of the project repository from Dropbox:

  $ git clone ~/Dropbox/git-server/Project.git
  $ cd Project
  $ git status

To update a clone from the Dropbox server:

  $ git pull origin master

Too easy!

Some other useful commands for examining the remote repositories:

  $ git remote
  $ git remote show origin

And note that you can add other remote repositories.  So you could add a github repository so you can selectively push stable snapshots of your project to github for public consumption, while keeping work-in-progress commits stored locally and backed up in Dropbox.

1 comment:

  1. If you want a nice git GUI (before xcode4) try gitx. There's some better forks on github as the original hasn't been updated in a while.