As I learn git, I’m experiencing advantages that I haven’t seen described together. Also, I haven’t seen a description from the perspective of the real-world differences in your files, so here goes:
Background context
Subversion uses a single, central repository which is in a remote place. And in your project, it maintains .svn/ directories in every sub-directory. Git on the other hand, gives each developer their own full-fledged repository. And then, instead of relying on many hidden directories in your project, it creates one that lives only in the top-level directory; in .git/. So again: that’s the only place it stores info; nowhere else in your code.
Interesting, huh?
The advantages I’ve found
So now that I’ve begun to use git, it’s already been a nicer experience than subversion:
Deleting a subdirectory doesn’t screw with the versioning like it does in svn. (Because no version info is stored there. In svn, you need to repair things; re-create the empty directory so you can delete it, etc. I do this to myself periodically.)
It’s totally painless to put existing stuff into git — it stays right where it is. E.g., a website that’s in use. You can initialize the repository and commit the current version of the files while they’re in use. This isn’t possible with svn: you have to check it in, then check it out.
It’s easy to work on a new idea: it’s really easy to create a branch to work on it, and then switch back and forth. In svn, this is enough of a pain that I don’t do it in actual practice. Git finally makes it easy for me to use revision control like I’ve always wanted: be able to check out our group’s code, test ideas out, and rollback in my own little world without disturbing the others, and finally commit only the changes I want to.
Git assumes you meant to delete that file. That’s been nice and convenient: I deleted a file without going and telling git first about it. Git adds a ‘delete’ operation to your list of things to check in. Awesome. Svn does it the other way around: You can’t just do normal file operations; you have to also tell subversion that yes, you did mean to do that.
Git has the GitHub killer app. It’s the Netscape of the WWW. I haven’t found an equivalent for Subversion — web-based or not.