Re: svn vs git
The staging / push concept in Git does look a little strange but it serves many purposes:
1. It's one final ass-saving chance from pushing something which is broken, or to modify your commit before you send it, e.g. if you missed a file or have another change to make.
2. You can make your own local branches without polluting some central repository.
3. You can squash all the commits from one local branches to another or do any other surgery you like to your repo then apply the work when you're ready.
4. You don't need network access except for push and fetch. i.e. you could be committing, diffing, merging or whatever to your own local repo.
5. Your repos don't need to follow some conventional centralised model, e.g. we had a repo with two remote sources - one an open source repository and another which was our own, and we could pull from one and merge to the other.
So it certainly looks a little clunky but it has a lot of advantages.
The main place git doesn't work is document management. Managers prefer to lock files and commit rather than dealing with branches and merging which make no sense in binary files any way. Git also kind of sucks for binary in general although things like large file support somewhat mitigate this issue.