diff options
Diffstat (limited to 'docs')
-rw-r--r-- | docs/CVS.html | 889 | ||||
-rw-r--r-- | docs/index.html | 2 |
2 files changed, 891 insertions, 0 deletions
diff --git a/docs/CVS.html b/docs/CVS.html new file mode 100644 index 00000000000..b986f9dec0a --- /dev/null +++ b/docs/CVS.html @@ -0,0 +1,889 @@ +<!-- $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> </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   +<a href="http://www.cs.wustl.edu/~nanbor/CVSUP/">CVSup</a>  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> <<em>email address</em>> +</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><<<<<<<</code> and + <code>>>>>>>></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 <jxh@cs.wustl.edu> 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 > <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 > <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> diff --git a/docs/index.html b/docs/index.html index 2de6c6759b9..b80733cb6be 100644 --- a/docs/index.html +++ b/docs/index.html @@ -74,6 +74,8 @@ ask. <P> <ul> <li><a href="ACE-development-process.html">Development and Release Process</a> - The process we use to develop and release the ACE library. + <li><a href="CVS.html">Overview of CVS</a> - How to use the source + control system we use for ACE, TAO, CIAO, etc. <li><a href="ACE-guidelines.html">Style Guide</a> - How to write compliant ACE code. <li><a href="ACE-porting.html">Porting</a> - What to do to port to a new platform. <li><a href="exceptions.html">Exception Macros</a> - How to use the ACE TRY |