

Git and SVN - an open source perspective - davidw
http://wooga.drbacchus.com/git-and-svn

======
rlpb
> 1) Cheap branches. Subversion has cheap branches.

I think what people might mean by cheap branches is that git does cheap
_local_ branches. You can work in your own private space and only when you are
ready commit the whole thing (reworked if necessary) to a central repository
or otherwise publish it. The outcome is that commits are seen by the outside
world (whether centralised or decentralised) as a set of complete logical
steps to get from A to B. The history ends up showing the evolution of a
program getting better. If in future a regression is discovered, it is easier
to find and fix by using the history to find the logical step with an error
and fixing just that.

With svn you have to create a branch on the central repository which will
remain in history forever more. Whether or not this is a good or bad thing,
the outcome is that fewer people do this way. Of course it happens for major
features, and for private branches. However for private branches it happens
less. Some try and do everything in one big commit instead of using individual
logical steps. More people make mistakes and then have to commit corrections
later. The outcome is that commits are seen by the outside world as a bunch of
random not-necessary-logical steps and corrections as the programmer worked
out how to solve the problem. This puts more errors and inconsistencies into
the history, making it less useful.

> 2) Fork and hack without all that overhead of connecting with the community.

This is where git shines. The community often won't accept a patch first time.
They'll discuss it and ask for modifications and improvements. git integrates
with this really well, since you can rebase in your private branch often and
submit new revisions of a particular patch, and this is all integrated into
the revision control system. svn simply has nothing that can compare.

> 3) No central repository.

No requirement for a central repository. As you point out, git can be arranged
in a way that uses one.

The difference between git and svn is that svn is just a means of maintaining
a central repository. git is a tool that can do this _but also helps you work
on your own code in an integrated manner before you publish it_.

------
stonemetal
I find my mercurial love comes from two things neither of which have to do
with the distributed nature of the project. It is faster than svn even on
tasks that require "server" access. The second is the ability to stage
checkins. Both apply to git as well.

------
davidw
Some good points regarding git, open source and hype.

