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
http://mail.gnu.org/archive/html/info-cvs/2002-12/msg00358.html)
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 ==
cvs.openssl.org:/e/openssl/cvs. to which a developer has access via
CVS over SSH. With my RSE CVS patchset applied, you now can do:
$ cvs root -e openssl cvs.openssl.org:/e/openssl/cvs \
/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
cvs.openssl.org:/e/openssl/cvs 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
$ vi CHANGES
$ 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.
Yours,
Ralf S. Engelschall
[EMAIL PROTECTED]
___
Info-cvs mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/info-cvs