[Spam] Re: [CMake] Re: Migration to subversion

Gonzalo Garramuño ggarra at advancedsl.com.ar
Fri Jan 4 16:55:10 EST 2008


Alan W. Irwin wrote:
> developers, but most software projects (such as CMake) will never have more
> than a handful of active developers

cmake already has about 10-20 or so developers (if you consider all the 
.cmake module contributions).  People with commit access, however, are 
much fewer right now.

> 
> I assume that does not rule out git or Mercurial.  For example, from the
> git-svn crash course at http://git.or.cz/course/svn.html, it appears that
> git has the capability to use a centralized repository (the so-called bare
> repository), and I presume that is the case for Mercurial as well.

Not really. Both git and Mercurial are always distributed.  You can have 
one "official" repository but you cannot prevent people from cloning it.

> However, I admit to having no development experience with git or Mercurial.
> Is there anything compelling (e.g., fewer bugs, better documentation, more
> useful features aside from distributed?) about either over svn for 
> projects like CMake that use a centralized repo?
> 

See Linus presentation at google (available on youtube).  But basically, 
with git you get:

* Faster and smaller repositories.  A git repository will often be 1/3rd 
of an equivalent cvs or svn one.
* git guarantees that what you put in the repository is what you get 
out.  All commits are SHA1 verified.  CVS and SVN have no verification. 
  If disk corruption happens or a malicious user fakes a file or screws 
up, say, the ,v files, you can get garbage out without anyone noticing.
* git offers two apis (one for high level user access and one for low 
level admin/script access similar to using tricks in cvs like hacking 
the ,v files).
* Branches and merging are native to the repository.  Both can be done 
in linear time (and probably) with much less chance of conflicts.
* Distributed.  You can work with the repository without being connected 
(on a plane or laptop, for example) and then merge later.
* Distributed allows you to much more easily mix and match from several 
repositories of trusted persons, to create your own flavor of code.  For 
example, Linus is not an expert in networking, but he can easily fetch 
and merge network changes from other developers that are, once they 
verified the code (thus, reducing the amount of work *he* has to do on 
things he is not really an expert on).  A central repository makes it 
much more easy for the changes of the two developers to overlap or screw 
up the build of the other person while developing.  Or the developer 
just has to "never commit, until all your tests pass and your changes 
are done".
* git offers bisect options in linear time.  It becomes trivial to find 
a line commit that screwed up something.  There's nothing like that on 
CVS or SVN, where it has to be done manually.  And even then, it is not 
linear.
* git patches can be created to be easy to email for those that have no 
write access.
* git has proven scalability (for both git and the kernel, probably some 
of the largest per day/month commit base of any known projects).

With Mercurial you get the same except faster and smaller and only a 
single api.  It is at least 40% slower than git in my (short) 
experience.  Monotone offers better verification but much, much slower 
performance.

In summary, once you use git, if you are like me, you'll realize that 
you've been doing source version control wrong all these years *sigh*.

-- 
Gonzalo Garramuño
ggarra at advancedsl.com.ar

AMD4400 - ASUS48N-E
GeForce7300GT
Xubuntu Gutsy


More information about the CMake mailing list