On Monday 06 November 2006 13:37, Kirill Shutemov wrote:
> On 11/6/06, Sean Russell <ser / germane-software.com> wrote:
> > 1) Sylvain is right about the development model of Ruby being more
> > in-line with having a central repository.
>
> Do you think that distributed repository will not be useful for
> adding new libs to standart library or make a global redesign in ruby
> core? I think it's very similar to kernel development process(adding
> new drivers and changing internal interfaces).

The problem is that distributed repositories, by design, are centrally 
managed.  That is, patches and changes have to go through one person -- 
one person owns the repository.  Centralized repositories, by design, 
expect that contributors all check in independently, without one 
central authority proofing every commit.  Linus ultimately oversees and 
approves every patch that goes in.  Recently, he delegates the actual 
patch proofing to lieutenants, but he still performs the commit 
himself.  Matz does not work this way.

Now, you can set up distributed repositories to allow all contributors 
to check-in without oversight, but that's the exception, not the rule.  
And you can set up centralized repositories to require confirmation by 
an individual before the commit is excepted -- again, the exception, 
not the rule.

Ruby is not developed like Linux is developed.  At least, the standard 
libraries aren't, and this lends itself more to a centralized 
repository.

Don't get me wrong: I like distributed VCSes, and I think that they're 
useful.  I waffle between SVN and Darcs; they each have really nice 
features.  However, I think that, in the case of Ruby, a centralized 
repository is a better architecture for the current development model, 
and the paradigms and workflow of SVN, being nearly identical to CVS, 
is a logical choice for a project that has always lived in CVS.  
Finally, I've found SVN to be extremely scalable and robust; as much as 
I like some Darcs features, I'd be reluctant to use it on a large 
project.  I can't speak for Monotone, bzr, or git (which has obviously 
proven itself on large projects).

> Git allow it by design, but I don't know if such merge-strategy
> implemented.

Git supports externals?  That's a surprise to me.  Some day, I need to 
build a matrix of common workflow tasks and see how the support in each 
VCS stacks up.  For example, checking in and out are pretty standard 
tasks, but I also find that there is a set of other features which is 
just painful to do without:

	Who changed what line of a file last (svn blame, cvs annotate)
	List all files changed in a commit (svn log -v)
	Shelving (svn cp; svn switch; svn ci; svn switch back)
	View all changes in a commit (svn diff -r V1:V2)
	Branch/tag a given revision (svn cp)

What I miss most from Subversion is block-level commits.  Oh, there is a 
feature of distributed VCSes that I sometimes miss: the ability to 
cherry pick features from several forks of a projects.  I think this is 
a really underused feature, but it doesn't work well if there isn't 
good patch theory support, and I really don't think it would be any 
benefit at all to Ruby.

--- SER