monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-devel] Re: New project: libmtn


From: Bruce Stephens
Subject: [Monotone-devel] Re: New project: libmtn
Date: Sun, 02 Jul 2006 15:14:58 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

Joel Rosdahl <address@hidden> writes:

> Bruce Stephens <address@hidden> writes:
>
>> [...]
>> So for some CVS repositories (most, probably), there can be no
>> monotone repository that represents what's in the CVS repository. 
>> It's simply not possible, because CVS can represent things that
>> can't be represented by monotone. (Other systems have the same
>> problem; the obvious exception is subversion, which also does things
>> for each file separately [...]
>
> AFAICT, that is incorrect. Subversion has had whole-tree commits from
> day one, so it also has the same problem.

You're mistaken.  A subversion repository has a revision number, and
each change to the repository (which may involve changes to many
files) increments the revision number.

However, the revision number on its own isn't that useful.  Nobody
checks out the whole repository.  Rather, each repository has
conventions of what projects are, and what branches and tags are.  For
example, cvs2svn has /cvs2svn/trunk, and subdirectories of
/cvs2svn/branches and /cvs2svn/tags.


So developers would check out /cvs2svn/trunk and work on that.  To
make a branch, you might do "svn cp <url>/cvs2svn/trunk
<url>/cvs2svn/branches/1.4.x" (where <url> is
http://cvs2svn.tigris.org/svn).  (Probably there are slicker ways to
do that.)

If that's all you do, then the branch is just as in any system
(excepting CVS).  However, you might decide that the branch would be
better with an updated manpage, so you can update that one file (in a
variety of ways).  I guess you'd do something like this:

        svn co <url>/cvs2svn/branches/1.4.x cvs2svn-branch
        cd cvs2svn-branch
        svn merge <url>/cvs2svn/branches/1.4.x/cvs2svn.1 
<url>/cvs2svn/trunk/cvs2svn.1
        # check file, then commit

Similarly you could update a directory, or every file whose name
contains a 'q'.  And next week you could make some other similar
change.  (Doubtless I've got the syntax slightly wrong, and that there
are better ways to do those things; I don't use subversion that
much---I use it as a stepping stone from CVS to monotone.)

So the atomic nature of subversion updates makes it possible to mirror
the structure you'd get in monotone, it doesn't really enforce it.
subversion still has the flexibility to accurately represent what's in
a CVS repository, I think.  (One can argue about whether that's a bug
or a feature.)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]