Speaking as a random lurker on Sbcl I've become a fan of git
in the last 6 months. On the axiom project we use Arch, CVS,
SVN, and git.
Like the transition to lisp, using git involves an "ah-ha" moment
when you finally "get it". After that you'll wonder why anyone
would consider using anything else.
Git is different and tracks changes, not files like CVS. Thus you
do a git-add every time you make a change to a file and want to
commit the change. So there are 3 "states" to a change, one in which
you've made the change but not added it. Git, unlike CVS will ignore
the change. The second state is after a git-add but before a commit.
The third state is after a commit.
A second difference from CVS, and my personal favorite since it
completely changed the way I work, is that you can create a branch,
do a bunch of work, and then switch back to the master branch. Git
will "undo" those changes you've done. When you switch back to the
branch it redoes your changes. It shoulds a lot like working in a
CVS branch but it is not.
Git also does changesets but this requires discipline. You need to
resist the urge to "fix this other bug while I'm here". This is a
side-effect of changeset mentality and not really a git issue.
But coming from CVS it is another hard change.
Git-commit just commits to your local copy (that is, it computes
a new MD5 hash). In order to change another repository (say a
general git server for those who want central service) you need
to do a git-push.
Git uses a much better tracking system. There is only one .git
directory. CVS, SVN, and Arch sprinkle directories everywhere. This
bit us on the axiom project because SVN makes the directories
read-only which caused a duplicate-copy bug. Git uses MD5 hashes
and comes up with a unique number for a commit. Using that number
(or a unique prefix) you can name any commit.
Changesets are also in Arch but the change-orientation and the ease
of branching is not. The Arch required-naming convention is also
hard for people to accept.
Git allows every clone to be "the central repository" so each person
has their own official version. You can "checkout" from other people's
version. They can "checkout" from yours. You can also commit. This is
a major shift of thinking from using a central repository.
CVS and its spawn SVN are much harder to use and require a central
repository. I use SVN for work and we use SVN for some of the people
on the project. My personal experience is that SVN loses work. This
has happened half-a-dozen times for work and twice for axiom. Source
code control systems should never lose work. Avoid SVN.
Oh, and git is blindingly fast. Did I mention that it is fast?
After watching SVN struggle to do anything git simply flies.