[Top][All Lists]

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

Re: One Workspace, Multiple Repositories

From: Ralf S. Engelschall
Subject: Re: One Workspace, Multiple Repositories
Date: Thu, 9 Jan 2003 21:29:30 +0100
User-agent: Mutt/1.4i

On Thu, Jan 09, 2003, David Eisner wrote:

> Consider the following scenario:
> I have a workspace on the local disk of my PC here at work.  I like
> working from the local disk because it's fast.  I have a personal
> repository on a networked filesystem.  At the end of each day,
> I update the repository.  Among other things, this serves as a backup,
> and it also makes it easy to work from home if I want to.
> Periodically, say once a week, I'd like to check my code into
> a separate, "official" departmental repository.  And, when changes
> are made in the departmental repository, I'd like to be able to
> cvs update the changes to my workspace (and check them into
> my personal repository as well).

Although a slightly different approach, but perhaps also
useful for your situation: my RSE CVS patchset (see
contains a "cvs root" command plus the ability that CVS on-the-fly
switches CVSROOT between a read-only local copy of the repository (for
fast/offline working) and an original remote repository (for central
storage). This works by making a local copy of the repository (via rsync
over ssh by default) after every repository WRITE operation (cvs commit,
cvs tag, etc) and by diverting all READ operations (cvs diff, cvs
update, etc) to the local repository.

As an example: the OpenSSL CVS repository is at $CVSROOT ==
"". to which a developer has access via
CVS over SSH. With my RSE CVS patchset applied, you now can do:

$ cvs root -e openssl \
  /u/rse/cvs/openssl rsync:!.#*,!CVSROOT/commitlogs/

This just remembers in $HOME/.cvsroot that the repository (arbitrary)
named "openssl" has a master location under the remote path and a slave location under the local path
/u/rse/cvs/openssl. And that the local reposistory can be updated via
rsync (and that some files are excluded for speed reasons). To establish
the local repository copy once initially you just run

$ cvs root -s openssl

This performs the rsync operation. Now you can check out your
working files from the repository:

$ cvs -d openssl co openssl-src

Keep in mind that you just specify a logical name for the
repository (which in stock CVS is invalid). This automatically
checks out with high speed from the local copy. Now you
can do all your work, e.g.:

$ cd openssl-src
$ cvs diff CHANGES

etc. To merge in the changes of other developers you just run:

$ cvs root -s ossp
$ cvs update

This first brings your local repository up-to-date, then updates from
there. If you now commit or tag something, CVS automatically temporarily
switches to the master (remote) repository, immediately followed by an
implicit "cvs root -s openssl" operation to immediately bring your local
repository up-to-date again.

I've originally implemented this two years ago for use with the ASF's
Apache CVS repository and my Laptop and using it since this time on a
daily basis with the OpenSSL, OpenPKG and OSSP projects. The nice thing
is that you do not have to change the ways you are used to work with CVS
and still get the advantage to work fully offline with high speed.

                                       Ralf S. Engelschall

reply via email to

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