My first experience of a VCS was Subversion. A migration to Git was always on the cards, and then when the SVN server crashed, it became a matter of supreme urgency and we switched to git literally overnight.

Luckily, by the time this happened, I had already watched Linus' famous presentation on Git, so I was expecting it to be substantially different from SVN and already had the attitude of "If it seems like Git is being stupid, it's because I'm expecting it to work like SVN. It was written by very clever people, so the problem is far more likely to be with me than with it." - This attitude helps tremendously when migrating to git.

There are people who say that git is just a fad and that it's nothing more than a faster SVN with the ability to work offline. Having used both, I must disagree: You might just as well say that a car is just a faster, easier-to-refuel version of a steam engine.

There's a multitude of stuff I do literally on a daily basis that SVN would either just not be able to do at all, or would be incredibly slow and painful to do. Interactively rebase a branch to squash together commits that I only made because I was pulled away to another branch and needed to commit before switching, for instance. Creating multiple local repos for my own use, for another.

I also find it far more powerful for examing history, finding specific commits, keeping projects seperate but up-to-date, etc. etc.

I have to go back to SVN every now and again, and it's frankly like switching from a Rolls Royce to a horse: Primitive and tends to crap on things.

In terms of specific setup matters, Below is my typical settings. 'gita' - an ascii equivalent of gitk - is about the only thing likely to be new to anyone who does much with git.

	    name = Dominic Humphries
	    email = myemail@oneandoneis2.com
	    diff = auto
	    status = auto
	    branch = auto
	    st = status
	    gita = log --graph --abbrev-commit --pretty=oneline --all
	    ci = commit
	    co = checkout
	    cp = cherry-pick
	    br = branch
	    dn = diff --name-only
	    dc = diff --cached
	    unstage = reset HEAD
	    default = tracking

TODO: interactive rebase, reset head, stat