Some us are using git for managing quickly changing code. This file has
  directions/notes for setting that up.

[Cloning]
`git clone \
    ssh://username@robotics.mvla.net/www/https/git/frc971/somebody/2013.git`
  where username is your login on the server and somebody is whoever's git
  repo you want to clone

[Adding Other People's Repositories]
`git remote add somebody \
    ssh://username@robotics.mvla.net/www.https/git/frc971/somebody/2013.git`
  where username is your login on the server and somebody is another person's
  git repository

[Working with Other People's Repositories]
`git fetch somebody` will pull their changes, and then you can rebase on top of
  them etc.
`git push --mirror` will push all of your local branches so that everybody else
  can see them.

[Synchronizing with SVN]
In order to synchronize the git commits with svn, somebody has to get git-svn
  set up in their local git repo and then push/pull commits.
  To do that, `git svn init https://robotics.mvla.net/svn/frc971/2013/trunk/src`
  Then, unless you want git-svn to pull down everything from SVN again, you have
    to do `vim .git/refs/remotes/git-svn` (or whatever you name the remote) and
    put in the commit ID of the latest commit in the repository that's from SVN.
  After doing that (and a `git svn fetch`), git-svn works like usual.
  To pull changes from svn, do `git-svn fetch`. To push changes to svn, do
    `git svn dcommit`, which will take all of your git commits between the
    latest commit from svn and your HEAD and make them into svn commits.
  Multiple people dealing with svn works out because the git commit IDs end up
    the same, so they all just become the same.
