[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Subversion, decentralized version control, and the future.

From: Giovanni Bajo <rasky_at_develer.com>
Date: 2007-07-03 12:05:09 CEST

On 03/07/2007 5.38, Karl Fogel wrote:

>>> We also have to be faster. Fortunately, we've pretty much agreed,
>>> IIRC, that we're willing to punt on subdirectory detachability in
>>> working copies in order to get performance improvements.

>> What is meant by "subdirectory detachability"? Just curious. I
>> didn't see it mentioned in the book on subversion I have, and
>> google doesn't want to help me with a likely reference...
>
> $ svn checkout http://svn.collab.net/repos/svn/trunk/ svn-src
> $ cd svn-src
> $ mv notes www ..
> $ cd ..
> $ rm -rf svn-src
> $ cd notes
> $ svn info | grep URL
> URL: http://svn.collab.net/repos/svn/trunk/notes
> ### Yup, it's a working copy. ###
> $ cd ../www
> $ svn info | grep URL
> URL: http://svn.collab.net/repos/svn/trunk/www
> ### Yup, this is a working copy too. ###
> $

I think that part of the reason why this feature might be important in
Subversion is that Subversion insists on *not* having a built-in concept of
"project", "branch" or "tag", or IOW to expose its versioned-filesystem guts
up to the command line client.

I think this is a point that should be revised for 2.0. I understand that the
versioned filesystem gut is important at the repos level (and maybe at the ra
level?). But I think that having it at the user level (command line) it's
creating more confusion and mess than anything else.

Repeating myself, I'm speaking *exclusively* of the UI.

The history also tells us something. CVS had an explicit concept and support
of branches and tags. SVN has it implicit (convention of using "/trunk",
"/branches", etc.). Mercurial/git has it *explicit* again.

By having implicit support for branches/tags, SVN UI is percolated with long
URLs everywhere. To do any non-trivial operation, you must enter the full URL
anytime. For instance, to answer a question like "what's the difference in
this file between this working copy and the last release of the project":

  * cvs diff -rRELEASE_12 foo.c
  * hg diff -rRELEASE_12 foo.c

you have to type the full URL, *twice*:

  * svn diff http://myrepo/project/tags/RELEASE_12/a/b/c/foo.c
http://myrepo/project/trunk/a/b/c/foo.c

Basically, anything that require tagging/branching/merging requires full URLs.
Compare that with the UI of Mercurial or CVS, where you simply do "hg tag
MYNEWTAG" to create a tag, and other simple commands to merge, show
differences, etc.

Notice that this problem isn't fixed even by graphical tools, at the moment.
TortoiseSVN itself is somehow forced to inherit the working copy model and to
exclusively act on the single working copy tree, without having a broader look
at the project, at the branches/tags, and thus providing higher-level commands
for the user.

-- 
Giovanni Bajo
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Jul 3 12:05:18 2007

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.