Why "git" instead of "svn"?

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.