summaryrefslogtreecommitdiff
path: root/docs/CVS.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/CVS.html')
-rw-r--r--docs/CVS.html889
1 files changed, 0 insertions, 889 deletions
diff --git a/docs/CVS.html b/docs/CVS.html
deleted file mode 100644
index b986f9dec0a..00000000000
--- a/docs/CVS.html
+++ /dev/null
@@ -1,889 +0,0 @@
-<!-- $Id$ -->
-
-<html>
-<head>
- <title>CVS Minimal Help</title>
- <link rev=made href="mailto:levine@cs.wustl.edu">
-<!-- Changed by: David Levine, 26-Mar-1997 -->
-</head>
-
-<body text = "#000000"
- link = "#000fff"
- vlink = "#ff0f0f"
- bgcolor = "#ffffff">
-<hr><p>
-<center>
- <h1>CVS Minimal Help</h1>
- <h2><a href="mailto:levine@cs.wustl.edu">David L. Levine</a></h2>
- <font size=-1>
- Last modified Monday, 30-Sep-2002 11:15:16 CDT.
- </font>
-</center>
-<h2>&nbsp</h2>
-
-This page contains the minimum (and then some) commands necessary to
-access and update <a href="http://www.cs.wustl.edu/~schmidt/ACE.html">ACE</a>
-through <a href="file:/project/doc/pkg/cvs/cvs-1.10/doc/cvs.ps">CVS</a>
-version control. The intended audience is local ACE developers, so
-it's not by any means a general introduction to CVS. And some HTML
-links and other references are local only.<p>
-
-The information here is based on CVS versions 1.9 and 1.10.5 and later.<p>
-
-Notes to emacs users: the emacs Tools/Version Control (or vc) pulldown
-has CVS commands: it's well worth checking out. And, see the
-<a href="#Preliminaries">Preliminaries</a> section for a handy
-addition to your .emacs file.<p>
-
-If you'd like to update your CVS workspace remotely, see
-<a href="http://www.cs.wustl.edu/~nanbor/">Nanbor Wang</a>'s&nbsp&nbsp
-<a href="http://www.cs.wustl.edu/~nanbor/CVSUP/">CVSup</a>&nbsp page.<p>
-
-Please <a href="mailto:levine@cs.wustl.edu">email me</a> any corrections or
-suggestions!<p>
-
-
-<font size="+2"><strong>Contents:</strong></font>
-<ol>
- <li><a href="#The Model">The Model</a>
- <li><a href="#Preliminaries">Preliminaries</a>
- <li><a href="#Getting started with ACE on CVS">Getting
- started with ACE on CVS</a>
- <li><a href="#Windows NT setup">Windows NT setup</a>
- <li><a href="#Checking in changes">Checking in changes</a>
- <li><a href="#Workspace update">Workspace update</a>
- <li><a href="#Adding/removing files/directories">Adding/removing
- files/directories</a>
- <li><a href="#Modules">Modules</a>
- <li><a href="#ChangeLog updates">ChangeLog updates</a>
- <li><a href="#File revisions">File revisions</a>
- <li><a href="#File reversion">File reversion</a>
- <li><a href="#Renaming a file">Renaming a file</a>
- <li><a href="#Local version control">Local version control</a>
- <li><a href="#Branches">Branches</a>
- <li><a href="#Remote repositories">Remote repositories</a>
- <li><a href="#Exporting from CVS">Exporting from CVS</a>
- <li><a href="#ACE_wrappers-frozen workspace">ACE_wrappers-frozen
- workspace</a>
- <li><a href="#ACE release bug-fix branch">ACE release bug-fix branch</a>
- <li><a href="#Warning messages/problems">Warning messages/problems</a>
- <li><a href="#For more info on CVS">For more info on CVS</a>
-</ol>
-
-
-<hr><p>
-<h3>1. <a name="The Model">The Model</a></h3>
-The following terms are used in the discussion in this web page:<br>
-<ul>
- <li><em>Repository</em>: The master store of all versions of all
- controlled files.<p>
- <li><em>Workspace</em>: A user's collection of controlled files.
- The user may modify these files at will.<p>
- <li><em>Check out</em>: Retrieve one or more files from the
- repository, and place them in a workspace. Any version of any
- file may be retrieved; typically, that will be the latest version.<p>
- <li><em>Check in, or commit</em>: Update the latest version of
- one or more files in the repository. This is done from a workspace.<p>
- <li><em>Module</em>: Directory.
-</ul>
-
-Our use of CVS fits into the
-<a href="http://www.cs.wustl.edu/~levine/ACE_wrappers/docs/ACE-development-process.html">ACE development process</a>.<p>
-
-
-<hr><p>
-<h3>2. <a name="Preliminaries">Preliminaries</a></h3>
-<p>The <code>CVSROOT</code> environment variable listed below is <font
-color=red> <strong><blink>required</blink></strong></font>. If you
-want to use CVS from within emacs, you'll have to restart it from a
-shell that has <code>CVSROOT</code> defined.<p>
-
-Emacs users might want to add <var>(setq vc-follow-symlinks t)</var>
-to your .emacs file to instruct emacs to follow symlinks to
-version-controlled plain files.<p>
-
-For lack of a better place to put the following, I'll put it here.
-It's a good idea to insert a CVS/RCS keyword string at the top of
-every file that you place under CVS control. This includes source
-files, Makefiles, config files, <em>etc</em>. It will embed in the
-file a concise record of the filename, last update time, revision
-number, and last user who updated it. For C++ files, the keyword
-string is:
- <pre>
- // $<!-- -->Id$
- </pre>
-It's not necessary to fill in the fields of the keyword string,
-or modify them when you edit a file that already has one. CVS
-does that automatically when you checkout or update the file.<p>
-
-On Unix systems, you might want to create a file called <code>.cvsrc</code>
-in your home directory with the following contents:
-<pre><code>
-co -P
-update -P
-</code></pre>
-That will cause CVS to prune empty directories on checkout or update.
-<p>
-
-
-<hr><p>
-<h3>3. <a name="Getting started with ACE on CVS">Getting started with ACE on CVS</a></h3>
-Note: the first three steps are for UNIX platforms. See the
-<a href="#Windows NT setup">Windows NT setup</a> section for
-setup information for Windows NT.
-<ol>
- <li>% <code>setenv CVSROOT /project/cvs-repository </code> ####
- site-specific location<p>
- <li>cd to the directory that you want your ACE_wrappers workspace
- to be under.<p>
- <li>% <code>setenv ACE_ROOT `pwd` </code> #### to set the ACE_ROOT
- environment<p>
- <li>Change your umask to something like 022 <strong>if</strong> you want
- others to be able to view your workspace.<p>
- <li>% <code>cvs checkout ACE_wrappers</code><p>
- <li>Add the ace/config.h and include/makeinclude/platform_macros.GNU
- symlinks. For example, for Sun C++ on SunOS 5.5:
- <pre><code>
- % ln -s config-sunos5.5.h ace/config.h
- % ln -s platform_sunos5_sunc++.GNU include/makeinclude/platform_macros.GNU
- </code></pre><p>
- <li>Hack away in your own workspace. All files have user write
- permission.
-</ol><p>
-
-
-<hr><p>
-<h3>4. <a name="Windows NT setup">Windows NT setup</a></h3>
-Thanks to <a href="http://www.cs.wustl.edu/~brunsch/">Darrell Brunsch</a>
-and <a href="http://www.cs.wustl.edu/~irfan/">Irfan Pyarali</a> for
-providing this NT setup information. (It contains a site-specific
-<code>CVSROOT</code>.)<p>
-
-You can use the CVS client under Windows NT to keep a local repository
-of ACE. To set it up, follow these steps:<P>
-<ol>
- <li>Find or create a directory in your path (I just created a utils
- directory and added it to my path).<p>
- <li>Download the files cvs.exe, patch.exe, and win32gnu.dll. They're
- in a zip file on
- <a href="http://download.cyclic.com/pub/cvs-1.10.5/windows/">Cyclic
- Software's download site.</a> (Cyclic Software hsa been acquired
- by SourceGear Corporation.)<p>
-
- Alternatively, <a href="http://www.wincvs.org">WinCVS</a> provides
- a graphical front-end on Windows. <strong>NOTE: </strong>if
- you use WinCVS, beware that it enables read-only checkout by
- default. So be sure not to check out that way if you want to
- edit files.<p>
-
- Thanks to <a href="http://www.riverace.com">Steve Huston</a> for that
- note.<p>
- <li>Be sure that the <a href="http://www.sourcegear.com/CVS">SourceGear</a>
- cvs utilities precede any
- <a href="http://www.cygnus.com/misc/gnu-win32/">Cygnus
- GNU-Win32 utilities</a> in your path, something like this:<p>
-
- <pre>
- d:\utilities\cvs;D:\utilities\gnuwin32\b18\H-i386-cygwin32\bin
- </pre>
- <li>Add to your environment: <BR>
- <code>LOGNAME = </code><em>username</em><br>
- <code>CVSROOT = ace.cs.wustl.edu:/project/cvs-repository</code><br>
-</ol>
-Please note that this approach uses a remote shell. So, your
-account must be able to rsh to the server machine.<p>
-
-For an alternative approach that uses CVS pserver instead of rsh,
-please see Darrell's <a
-href="http://tao.cs.wustl.edu/howto/use_win32_pserver.html">CVS
-pserver page for Win32</a>.<p>
-
-
-<hr><p>
-<h3>5. <a name="Checking in changes">Checking in changes</a></h3>
-By convention, any repository change should be documented in
-an appropriate ChangeLog. The ChangeLog entry should start with
-a line of this form:
-<pre>
- ChangeLogTag: <em>date</em> <em>name</em> &lt;<em>email address</em>&gt;
-</pre><p>
-
-In all examples below, <code>ChangeLog</code> refers to appropriate
-ChangeLog.<p>
-
-<h4>5.1. Command line</h4>
- To enter your workspace changes into the master repository from
- the command line::<p>
-<pre>
- % cvs commit -m "ChangeLogTag: `head -1 ChangeLog`" <em>file(s)/directori(es)</em> ChangeLog
-</pre><p>
-
-<h4>5.2. From emacs</h4>
- To checkin one file or directory to the repository:<p>
-<ol>
- <li><code>C-x v v </code>(vc-next-action) to check the file or directory
- in<p>
- <li>Insert the ChangeLogTag, using the first line of your ChangeLog entry<p>
- <li><code>C-c C-c </code> to finish checkin
-</ol><p>
-
-
-<hr><p>
-<h3>6. <a name="Workspace update">Workspace update</a></h3>
-To update your workspace from the master repository, to pick up changes
-by others:<p>
- <blockquote>% <code>cvs update ACE_wrappers</code></blockquote><p>
-
-cvs will print out a line for each directory that it enters
-(by default, it will recurse through the directory tree; to
-disable this and only update one directory, add <code>-l</code>
-after <code>update</code>).<p>
-
-cvs will print out a line for each file that differs from what is
-in the repository. This first character indicates the file status:
-<ul>
- <li><code>U</code> the file was brought <strong>up-to-date</strong>, so
- now it agrees with what is in the repository
- <li><code>P</code> same as <code>U</code>, except used by CVS server
- when it sends a patch instead of the entire file
- <li><code>M</code> the file is <strong>modified</strong> in your
- workspace with respect to the repository; without any
- other message, it means that the file was not modified
- by this update operation. If changes were
- successfully merged (without conflict), then cvs will
- note on the previous lines.
- <li><code>C</code> the file needs to be updated, but a
- <strong>conflict</strong> was detected. The file now
- contains the differences, demarcated with
- <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code> and
- <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code>. The
- unmodified file was moved to <em>.#file.revision</em>.
- You'll need to edit the file to resolve the
- differences. I get a lot of false positives on files
- that I know I didn't modify locally: for those cases,
- I just remove the file and rerun update.
- <li><code>A</code> or <code>R</code> The file has been
- <strong>added</strong> or <strong>removed</strong>
- to/from your workspace, but the add or
- remove has not yet been committed.
- <li><code>?</code> the file is <strong>private</strong> to your
- workspace: it does not exist in the repository
-</ul>
-
-To show what update would do to the currently directory (recursively),
-without actually doing it:
-<blockquote>% <code>cvs -n update <strong>.</strong></code></blockquote>
-<blockquote>
- The -q option to update suppresses the ``Updating'' message for each
- directory:
- <blockquote>%
- <code>cvs -nq update <strong>.</strong></code></blockquote>
-</blockquote>
-
-To get the status of the current directory (recursively) with respect to
-the repository:
-<blockquote>% <code>cvs status <strong>.</strong></code></blockquote>
-
-To get the status of a single file with respect to the repository,
-with symbolic tags displayed:
-<blockquote>% <code>cvs status -v <em>file</em></code></blockquote>
-
-To show local (in current workspace) changes to one or more files,
-relative to the versions that they were checked out from:
-<blockquote>% <code>cvs diff <em>file(s)/directori(es)</em></code>
-</blockquote>
-
-To show local (in current workspace) changes to one or more files,
-relative to the latest versions in the repository:
-<blockquote>% <code>cvs diff -rHEAD <em>file(s)/directori(es)</em></code>
-</blockquote><p>
-
-
-<hr><p>
-<h3>7. <a name="Adding/removing files/directories">Adding/removing files/directories</a></h3>
-Adding one or more text files requires two steps:
-<pre>
- % cvs add <em>file . . .</em>
- % cvs commit <em>file . . .</em>
-</pre><br>
-The commit may be done later, on the entire directory, etc.
-Note that cvs <strong>add</strong> is not recursive, so
-that the files in each directory of a hierarchy must be
-added in separate commands. Also, only files in the current
-directory can be added.<p>
-
-Binary files require the <code>-kb</code> option to <code>cvs add</code>:
-<pre>
- % cvs add -kb <em>file . . .</em>
- % cvs commit <em>file . . .</em>
-</pre><br>
-If not applied during the <code>add</code> operation, <code>-kb</code>
-can be applied using <code>cvs admin -kb</code>.<p>
-
-Removing files is similar, except the cvs <strong>remove</strong>
-command is used instead of the <strong>add</strong> command:
-<pre>
- % cvs remove <em>file . . .</em>
- % cvs commit <em>file . . .</em>
-</pre><p>
-
-An add of an empty directory doesn't require a commit.<p>
-
-Removing a directory is more problematic. There is no CVS command to
-remove (or rename) a directory: it has to be done behind CVS' back,
-directly in the repository. This is by design; a CVS command can't be
-used to irrevocably destroy information. Therefore, never remove a
-directory. You can safely remove all of the files in it, using the
-above steps.
-
-To just remove a directory from a workspace (without removing it from
-the repository): first, remove the directory and all of its files
-using usual OS commands. Second, run
-<pre>
- % cvs update -P <em>directory-path </em>
-</pre><br>
-to prune the directory from the workspace.<p>
-
-
-<hr><p>
-<h3>8. <a name="Modules">Modules</a></h3>
-Instead of referring to ``ACE_wrappers'' above, you can refer
-to a module, such as ace, tests, performance-tests, and so on.
-To get a list of known modules, use the -c option to checkout:
-<blockquote>% <code>cvs checkout -c</code></blockquote><p>
-
-<strong>IMPORTANT</strong>: if a subdirectory is added to ACE, it
-<strong>must</strong> be added to the list of known modules in
-<code>$CVSROOT/CVSROOT/modules</code>! If you don't want to edit that
-file, please tell <a href="mailto:levine@cs.wustl.edu">David</a>. The
-<code>CVSROOT</code> files are under RCS control. emacs' VC tools
-handle them the same way that they handle CVS-controlled files. So,
-you can check them out and back in with <code>C-x v v</code>.<p>
-
-To add an entirely new module:
-<ol>
- <li>Create the directories/files.<p>
- <li>Add the module to <code>$CVSROOT/CVSROOT/modules</code>, as
- mentioned above.<p>
- <li>Create a new directory in <code>$CVSROOT</code>, owned by the appropriate
- group and with sufficient (probably group write+setuid) permissions.<p>
- <li>Change to the directory just above the top-level directory for
- the module in your workspace.<p>
- <li><code>cvs checkout <em>new module name</em></code><p>
- <li>Add all of the new directories/files in the module, as described
- <a href="#Adding/removing files/directories">above</a>, then commit.
-</ol>
-
-
-<hr><p>
-<h3>9. <a name="ChangeLog updates">ChangeLog updates</a></h3>
-To automatically update the ChangeLog, use the emacs command:
-<pre>
- C-u C-x v a
-</pre>
-Thanks to James Hu &lt;jxh@cs.wustl.edu&gt; for this useful tidbit.<p>
-
-To set a specific host address in your ChangeLog entries, add a line
-like this to your <code>~/.emacs</code>:
-<pre>
- (setq mail-host-address "cs.wustl.edu")
-</pre><p>
-
-To set a specific name in your ChangeLog entries, add a line like
-this to your <code>~/.emacs</code>:
-<pre>
- (setq user-full-name "my full name")
-</pre>
-Otherwise, CVS uses the name (GECOS field) from your passwd entry.<p>
-
-
-<hr><p>
-<h3>10. <a name="File revisions">File revisions</a></h3>
-File revisions in and below the current directory may be tagged with:
-<pre>
- % cvs tag <em>tag</em> <strong>.</strong>
-</pre><p>
-
-To retrieve an old revision of a file, use the -r option to cvs
-<strong>update</strong>:
-<pre>
- % cvs update -r<em>tag file</em>
-</pre>
-The revision tags of a file can be viewed
-with the cvs <strong>log</strong> command.<p>
-
-Or, to retrieve the file and/or directory versions as of a
-certain date and time, use the -D option to cvs <strong>update</strong>,
-for example:
-<pre>
- % cvs update -D "last Saturday" OS.{h,i,cpp}
-</pre>
-
-<strong>NOTE: </strong>The -r and -D options are ``sticky''; they will
-apply to the file(s)/directories until overwritten with another revision
-tag or date, or until disabled.
-They are disabled by using the update -A option, which also checks out
-the latest revision:
-<pre>
- % cvs update -A <em>file</em>
-</pre><p>
-
-To change the log message for a particular revision of a file:<p>
-<pre>
- % cvs admin -m<em>revision</em>:"<em>new message</em>" <em>file</em>
-</pre><p>
-
-
-<hr><p>
-<h3>11. <a name="File reversion">File reversion</a></h3>
-There are a few ways to revert a file to the last revision that is in
-the repository, if you want to abandon your changes to it:
-
-<ul>
- <li>The easiest way to abandon your changes <strong>in your
- workspace</strong> is to use the emacs command <code>C-x v u </code>
- (vc-revert-buffer). Or from the shell, you could remove the
- file and update it with <code>cvs update <em>file</em></code>.<p>
-
- <li><strong>Do not remove a revision from the cvs repository
- directly.</strong> To revert a revision that you made, use the
- following command to revert the change in your workspace and
- check in the reverted version:
-<pre>
- % cvs update -j<em>after_change</em> -j<em>before_change</em> <em>file</em>
-</pre>
- For example, if the version containing the version you want to
- revert is 4.10, then, <em>after_change</em> should be
- <code>4.10</code> and <em>before_change</em> should be
- <code>4.9</code>.<p>
-
- <strong>NOTE:</strong> this doesn't seem to work with CVS version 1.10.<p>
-
- Make sure the patch succeeded (if you are not reverting a change
- you made long time ago, most likely it will succeed) before
- checking in the reverted version.<p>
-
- Also make sure the you add a ChangeLog entry explaining why
- you reverted the change.
-</ul>
-
-<hr><p>
-<h3>12. <a name="Renaming a file">Renaming a file</a></h3>
-There are three ways to rename a CVS-controlled file. The first
-preserves the revision log, but it must be accessed by either the
-original or new name, depending on what you want to see. And
-revision numbers will start over at 1.0 unless set with the
-<code>-r</code> option. It's all done in the user's workspace:
-<pre>
- Add ChangeLog entry containing:
- Renamed <em>OLD</em> to <em>NEW</em>
- % mv <em>OLD</em> <em>NEW</em>
- % cvs remove <em>OLD</em>
- % cvs add <em>NEW</em>
- % cvs commit -m "ChangeLogTag: `head -1 ChangeLog`" <em>OLD</em> <em>NEW</em> ChangeLog
-</pre><br>
-
-The second method maintains the revision log in one place and the
-revision number sequence. It makes fetching old releases of the
-module more difficult, which may be an advantage or disadvantage
-depending on local circumstances. It is more dangerous because the
-repository is modified directly; see the warning in the cvs info page
-about other users accessing the history file while it is being moved:
-<pre>
- % cd $CVSROOT/<em>MODULE</em>
- % mv <em>OLD</em>,v <em>NEW</em>,v
-</pre><br>
-
-The third method is to copy the history file in the repository.
-Instead of moving the history file, as in the second method above,
-copy it. It's not necessary to prevent others from accessing the
-file. The cvs info pages show other steps, to remove the old tags
-from the new history file. While technically correct, I don't think
-that's necessary for our purposes.<p>
-
-While the first method is the safest, it has the distinct disadvantage
-of hindering access of old versions. If that's not a problem for a
-particular file, then it is the preferred approach. As Carlos would
-probably say if you asked him, ``it's the right thing to do.''<p>
-
-If easy access to old versions is desired, I would use the third
-approach: copy the history file in the repository.<p>
-
-
-<hr><p>
-<h3>13. <a name="Local version control">Local version control</a></h3>
-All version control with CVS is done through the master repository.
-CVS doesn't provide any facility for local checkpoints. If you want
-local version control in your workspace, there's nothing to stop you
-from using RCS or SCCS locally (but it might confuse emacs' version
-control). The preferred approach is to create a branch, and
-checkpoint as much as you want on that branch. When the time comes to
-make the changes public, just merge the branch. See the <a
-href="#Branches">Branches</a> section of this page, and the cvs man
-page, for instructions on creating and using a branch.<p>
-
-
-<hr><p>
-<h3>14. <a name="Branches">Branches</a></h3>
-To create a branch, you must first create a tag to identify the
-branch. Then, you can checkout on that branch. There are various
-ways to go about doing this, but these steps show how when starting
-from scratch:
-
-<pre>
- % cvs rtag -b <em>branch_tag</em> <em>module(s)</em>
- % cvs checkout -r <em>branch_tag</em> <em>module(s)</em>
-</pre>
-
-It's not necessary to checkout all the files in a directory or module
-on the branch, but it's probably the easiest and least confusing
-approach in the long run. <strong>Note</strong> that it's usually
-tricky to tag individual files on a branch because CVS won't
-be able to identify which module they're in. By way of example,
-to checkout just <code>ace/OS.h</code> on a branch, you'd have to do
-this, assuming that you're already in the <code>ace</code> directory:
-<pre>
- % cd ..
- % cvs rtag -b <em>branch_tag</em> ace/OS.h
- % cvs checkout -r <em>branch_tag</em> ace/OS.h
- % cd ace
-</pre>
-This can be done after modifying files, and CVS will retain your
-modifications. However, if you don't trust CVS, it's best to backup
-your files first.<p>
-
-Checkouts on a branch are sticky, and will apply until the head
-version of the file(s) have been checked out with the <code>-A</code>
-option to <code>cvs update</code>. Presumably, this will be done
-after merging the branch to the main trunk. See the
-<a href="#Old file revisions">Old file revisions</a> section of this
-page for similar discussion of sticky tags.<p>
-
-To merge an entire branch to the main trunk, use the <code>-j</code>
-(for <em>join</em>) option to <code>cvs checkout</code>. That just
-merges in your workspace; the repository can then be updated from the
-workspace using <code>commit</code> as usual:
-<pre>
- Add ChangeLog entry containing:
- merged <em>branch_tag</em>
- % cvs checkout -P -Aj <em>branch_tag</em> <em>file(s)/directori(es)</em>
- % cvs commit -m "ChangeLogTag: `head -1 ChangeLog`" <em>file(s)/directori(es)</em> ChangeLog
-</pre>
-(The <code>-A</code> is needed if you are in the workspace that has
-the checkouts on the branch. It updates the workspace to the latest
-versions on the main trunk. So, <strong>don't</strong> use it if
-you want to keep working on the branch.)<p>
-
-To merge any changes on the main trunk to a branch, the first time:
-<pre>
- Add ChangeLog entry containing:
- merged main trunk changes
- % cvs update -jHEAD <em>file(s)/directori(es)</em>
- % cvs commit -m "ChangeLogTag: `head -1 ChangeLog`" <em>file(s)/directori(es)</em> ChangeLog
- % cvs tag <em>merged_foo_branch</em> <em>file(s)/directori(es)</em>
-</pre>
-
-<strong>AFTER MERGING, APPLY A LABEL TO THE SOURCE BRANCH,
-as shown above.</strong>
-For example, if you merged from the main trunk to a branch,
-apply a new label to the main trunk. You can use that label
-later to merge any subsequent changes on the main trunk. The
-<code>cvs</code> info pages have a good example of this.
-Briefly:
-
-<pre>
- Add ChangeLog entry containing:
- merged main trunk changes
- % cvs update -j<em>merged_foo_branch</em> -jHEAD <em>file(s)/directori(es)</em>
- % cvs commit -m "ChangeLogTag: `head -1 ChangeLog`" <em>file(s)/directori(es)</em> ChangeLog
- % cvs tag <em>merged_foo_branch_again</em> <em>file(s)/directori(es)</em>
-</pre>
-
-
-Note that any files created on the branch won't be visible on
-the main trunk, even after the merge. I'm not sure of right
-way to take care of this, but I follow these steps for each
-file created on the branch:<p>
-<ol>
- <li>In the repository, move the RCS file from the <var>Attic</var>
- directory up to its parent directory.
- <li>Edit the RCS file, replacing the "dead" state with "Exp".
- <li>Merge from the branch to the main trunk:
- <pre>
- Add ChangeLog entry containing:
- merged <em>branch_tag</em>
- % cvs update -Aj <em>branch_tag</em> <em>file</em>
- % cvs commit -m "ChangeLogTag: `head -1 ChangeLog`" <em>file</em> ChangeLog
- </pre>
-</ol>
-
-To create a file on a branch, in a directory that has not been
-checked out on the branch:
-<ol>
- <li>Add the file and commit it to the main branch
- <li>Create the branch tag on the file, and check the file out
- on the branch.
- <li>Remove the file, cvs remove the file, and commit the removal.
- <li>Check the file out on the branch.
-</ol>
-Alternatively, the recommended procedure is to simply check the
-entire directory out on the branch, then create the file.<p>
-
-In general, deleting branch tags is not recommended. But it's often
-necessary, especially when getting started with branches. The
-<code>-d</code> option to <code>cvs rtag</code> can be used to delete
-a branch tag.<p>
-
-The use of a branch for maintaining a release is illustrated
-in the section on the <a href="#ACE release bug-fix branch">ACE
-release bug-fix branch</a>.<p>
-
-
-<hr><p>
-<h3>15. <a name="Remote repositories">Remote repositories</a></h3>
-Before setting up a repository for remote access, be sure to see
-the <a href="file:/project/doc/pkg/cvs/cvs-1.10/doc/cvs.ps">CVS
-documentation</a>. There are important security considerations.<p>
-
-An easy way to access a remote repository is via rsh. These steps
-ought to get you going:
-<ol>
- <li>Install cvs on the local system, if it doesn't already have it.<p>
- <li>Add yourself to an <code>.rhosts</code> file on the remote machine
- of a user that can access the repository.<p>
- <li>Set your <code>CVSROOT</code> environment variable to:<br>
- <pre>
- <em>remote user</em>@<em>remote host</em>:<em>remote repository</em>
- </pre>
-</ol>
-Then, you can issue cvs commands just as you would on the remote machine.<p>
-
-If you have ssh on your client machine, you can use ssh instead of
-rsh. Just set your <code>CVS_RSH</code> environment variable to
-<code>ssh</code>. You don't need to add an <code>.rhosts</code>
-entry with ssh, so it's the best alternative for remote repository
-access.<p>
-
-Another way to access to remote cvs repository is to run cvs in
-client-server mode. To use this feature, first check if you have your
-<code>HOME</code> environment variable set properly. Then, set your
-<code>CVSROOT</code> to:<p>
-<pre>
- :pserver:your_user_id@ace.cs.wustl.edu:/project/cvs-repository
-</pre><p>
-Then, do a cvs login as
-<pre>
- % cvs login
-</pre><p>
-Type in your password when CVS prompts you to enter your password.
-This will create a file call "<code>.cvspass</code>" in your home
-directory (as defined by <code>$HOME</code>) that contains the
-encripted password for the server. You can now perform regular CVS
-operation directly.<p>
-
-<strong>Notice:</strong> It's not difficult to decode the passwords in
-<code>.cvspass</code> file. Therefore, never use cvs in client-server
-mode in a unsafe environment. (Where others can read your .cvspass
-file.)<p>
-
-To speed up client-server mode operations, it might help to use
-the <code>cvs</code> <code>-z</code> option. It requires that
-<code>gzip</code> be on your search path on both the client and
-server. An example use is:<p>
-<pre>
- % cvs -z 1 update
-</pre><p>
-
-Thanks to <a href="http://www.cs.wustl.edu/~nanbor/">Nanbor Wang</a>
-and <a href="http://www.cs.wustl.edu/~brunsch/">Darrell Brunsch</a>
-for figuring out and providing this documentation for cvs
-client-server mode.<p>
-
-
-<hr><p>
-<h3>16. <a name="Exporting from CVS">Exporting from CVS</a></h3>
-There are two different strategies for exporting CVS-controlled files,
-such as for code releases. The first, preferred approach is to use
-the cvs <strong>export</strong> command to stage a version of the
-controlled files to a non-controlled directory. This version will
-not have any of the CVS files in it. THe second approach is to
-create a release from a user's CVS-controlled workspace.<p>
-
-To use cvs <strong>export</strong>, either a date or revision
-tag must be specified. It's usually a good idea to tag the sources
-with a revision tag and use that. So, the steps would be:<br>
-<pre>
- % cd <em>root of directory tree</em>
- % cvs tag <em>tag</em> <strong>.</strong>
- % cd <em>staging directory</em>
- % cvs export -r <em>tag</em>
- % find . -print | cpio -o -H tar | gzip -9 &gt; <em>tar filename</em>
-</pre>
-
-To tag and create a release in the form of a gzip'ped tar file
-from a user's workspace:
-<pre>
- % cd <em>root of directory tree</em>
- % cvs tag <em>tag</em> <strong>.</strong>
- % find . -name CVS -prune -o -print | cpio -o -H tar | gzip -9 &gt; <em>tar filename</em>
-</pre>
-
-The relative advantage of the first, export approach is that you will
-be sure that only CVS-controlled files will be released. However, it
-requires the extra step and creation of the staging area.<p>
-
-This extra step is one reason why we don't currently stage releases of
-ACE. Instead, they are built from Doug's personal workspace. That
-workspace is visible on the web, so that ACE users can track the very
-latest changes without any explicit action by Doug. If we were to
-stage it, to make any change visible would require an explicit move to
-the staging area.<p>
-
-
-<hr><p>
-<h3>17. <a name="ACE_wrappers-frozen workspace">ACE_wrappers-frozen workspace</a></h3>
-
-This section applies to the DOC group at Wash. U. only:<p>
-
-There's now a ``frozen'' ACE in
-<strong>/project/cvs-repository/ACE_wrappers-frozen/</strong>.
-It contains the latest official release of ACE.<p>
-
-There are complete g++ 2.7.2.1 and Sun C++ 4.2 builds in the
-<strong>build</strong> directory below the directory noted above.
-To use one of these builds, set or prepend to these environment variables:<p>
-<table border>
-<tr>
-<th>Compiler</th>
-<th>set <strong>WRAPPER_ROOT</strong> to:</th>
-<th>prepend to <strong>LD_LIBRARY_PATH</strong>:</th>
-<tr>
-<td>g++</td>
-<td>/project/cvs-repository/ACE_wrappers-frozen/build/SunOS5_g++</td>
-<td>/project/cvs-repository/ACE_wrappers-frozen/build/SunOS5_g++/ace</td>
-<tr>
-<td>Sun C++</td>
-<td>/project/cvs-repository/ACE_wrappers-frozen/build/SunOS5_sunc++-4.2</td>
-<td>/project/cvs-repository/ACE_wrappers-frozen/build/SunOS5_sunc++-4.2/ace</td>
-</table><p>
-
-
-<hr><p>
-<h3>18. <a name="ACE release bug-fix branch">ACE release bug-fix branch</a></h3>
-
-This section applies to the DOC group at Wash. U. only:<p>
-
-The ``main line'' CVS branch will (continue to) be the ``new features''
-branch. If you want the very latest and greatest ACE at all times, no
-changes to the use of your workspace are required. Just
-<code>cvs update</code> it as usual.<p>
-
-Bug fixes to the official release will go on a branch. For the ACE
-4.2 release, for example, this branch is name
-<strong>ACE-4_2</strong>. (CVS does not allow periods in branch names
-or any other tags.) To use it, do this in your workspace:
-<pre>
- % cd ..
- % cvs checkout -r ACE-4_2 ACE_wrappers
-</pre>
-
-From that point on, all updates and commits in that workspace
-will be from/to the <strong>ACE-4_2</strong> branch.<p>
-
-
-<hr><p>
-<h3>19. <a name="Warning messages/problems">Warning messages/problems</a></h3>
-<dl>
-<blockquote>
-
- <dt><pre>cvs update: conflict: <em>foo </em>is modified but no longer in the repository<br>
-U <em>bar</em></pre>
- <dd>That might indicate that file <em>foo</em> was renamed to <em>bar</em>.
- If so, <em>foo</em> should be removed from the current workspace. (And
- that warning will not reoccur for the workspace, because its CVS will
- have removed <em>foo</em> from the workspace entries and checked out
- <em>bar</em>.)<p>
-
- <dt><pre>cvs update: [<em>time</em>] waiting for <em>user</em>'s lock in <em>repository</em></pre>
- <dd>Check for lock files and directories in the <code>$CVSROOT/CVSROOT</code>
- and lock files anywhere in the <code>$CVSROOT</code> hierarchy. Remove
- ones that no longer appear to be in use and retry. Lock files and
- directories have names starting with ``.#'', I think.<p>
-
- <dt>Why does a file in the repository not have group and/or other read
- permission?<p>
- <dd>Because it didn't have those permissions when it was added to the
- repository. To fix it, those permissions can be added to the ,v file in
- the repository. To avoid it, those permissions should be added to the
- file before it is created/committed the first time.<p>
-
- <dt>Why does CVS keep removing group/and or other read permission from a
- file in my workspace?<p>
- <dd>Because your umask is something like 7 or 77. Change it to something
- like 22. If you don't want to change it for everything, then alias cvs;
- in t/csh:<br>
- <blockquote>% <code>alias cvs '(umask 22; \cvs \!*)'</code></blockquote>
- <p>
- Also, the file will have to have mode 644 before you commit it. So if
- your editor removes group/other read permission, you'll have to ``fix''
- that as well.<p>
-
- <dt>I modified Makefile in my workspace so I don't build static or shared
- ACE libraries. But, I forgot about it and commited the modified
- Makefile to the repository. Help?<p>
- <dd>You'll have to correct the Makefile and commit your corrections.<p>
-
- Instead of modifying your makefile, try these commands to build the
- ACE static and shared libraries, respectively:
- <blockquote>% make <code>static_libs_only=1</code></blockquote>
-
- <blockquote>% make <code>shared_libs_only=1</code></blockquote>
-
-</blockquote>
-</dl><p>
-
-
-<hr><p>
-<h3>20. <a name="For more info on CVS">For more info on CVS</a></h3>
-Please see these sources for more information on CVS:
-<ul>
- <li>David Discher's <a href="http://dpd.dpdtech.com/cvs/">Quick N
- Dirty CVS HOW-TO</a> is really helpful.<p>
-
- <li>Please check out David G. Grubbs' great, comprehensive <a
- href="http://cellworks.washington.edu/pub/docs/cvs/cvs-FAQ/cvsfaq0.html">"The
- CVS FAQ"</a>.<p>
-
- <li><a href="http://www.loria.fr/~molli/cvs-index.html">CVS Bubbles</a>
- is a collection of useful CVS information and links.<p>
-
- <li>Commercial support for CVS is available from <a
- href="http://www.sourcegear.com/CVS">SourceGear Corporation</a>.
- Their web pages are very helpful.<p>
-
- <li>Terris Linenbach has an interesting, brief discussion of
- source code management on-line at <a
- href="http://devguy.com/fp/ProgrammersCanvas">Programmers'
- Canvas</a>. Programmers' Canvas is a pattern language,
- also quite interesting.
-</ul>
-
-<p><hr>
-<p>Back to
-<a href="http://www.cs.wustl.edu/~levine">David L. Levine's home page</a>.
-<p>
-
-
-
-<font size=-1>
-Last modified 11:15:16 CDT 30 September 2002.
-<br>
-[an error occurred while processing this directive]
-[an error occurred while processing this directive]
-<p>
-</font>
-
-
-
-</body>
-</html>