CMM to CVS Transition Support
We support transitioning from CMM to CVS provided that the following
conditions are met:
- The CVS repository is installed on a centralized CVS server.
- A pkgin compliant integration (BUILD) module exists,
listing all the modules in the project. External modules which are
not listed in the integration module will not be converted.
- No module whose last revision starts with 0 will be
- Project responsible will specify which releases have to be clearly
identified with CVS tags by supplying a list of Integration
Module versions and the corresponding logical names (tags).
The results will be a collection of modules located under the
specified directories whose history is the same as of CMM but whose
baselines can only be identified by means of CVS tags.
Support can be given for proper handling of binary files (which
usually create problems across OS boundaries) and applying project
specific QA procedures.
CVS User's Guide (PDF)
Tricks, Bugs, Gotchas of CVS
Compared to CMM, CVS offers a considerable amount of freedom, and
freedom never comes without complexity.
To the newcomer, the amount of
options which each CVS command accepts is confusing. One way out of
this situation is quickly identifying some basic commands and tricks
which make your life easier. This collection is by no means
exhaustive, but is a good start.
For brief info on CVS branches, click here.
For an introduction on Emacs CVS mode click here.
- To request a CVS login (not ALMA), send an e-mail to <
firstname.lastname@example.org > containing your encrypted desired
To obtain that, type:
perl -e 'print crypt(
"yourpassword", "b6"), "\n";'
Note: if your password contains a $
(dollar sign), it will have to be entered with a backslash.
- The diff command between HEAD and a BRANCH only works reliably if
seen from the HEAD perspective
- CVS seems not to cope well with 0.* delta numbers.
- The only way to add directories recursively in CVS is using
the import command, but that feature does not work when used
in :pserver: mode.
- Timestamps of files extracted from CVS:
This should be considered when extracting source code from the repository into an already built system, because the Makefile will react according to the timestamp.
- cvs checkout
gets files with the date of commit
- cvs update
get files with the date of NOW
- There seem to be compatibility issues between CVS revision 1.10 and 1.11.1
- The checkout command (alias co or get) can only be carried out
from the top of the path relative to $CVSROOT.
- cvs behaviour is different if you use cvs export -rTAG
module or cvs export -r TAG module
- Use cvs checkout -c to get a list of the modules in the
repository, provided that someone is maintaining it
- One command of frequent usage is: cvs -n -q upd which
produces a list of files with a one letter prefix in the form:
modified, U=updated, R=removed, A=added, C=conflicts
This is the
central command which you would want to execute prior to
archival/tagging just to verify that the relationship between the
archive and your current working space is the one you expect.
- CVS has two levels of verbosity: cvs -q (somehow quiet)
and -Q (really quiet), followed by the specific command
- To get a list of options for a specific CVS command, you can use :
cvs --help command
- To start practicing with CVS it may be useful to supply the
global options -n and -t, which respectively force CVS not to carry out
any modification (but only print reports) and to trace program
execution (useful when using some CVS commands for the first time).
- To schedule a file for deletion and remove the file from the
filesystem use cvs remove -f file
- Most CVS commands take as an argument either a file or a
directory, in the latter case they recurse down the filesystem. To
avoid this behaviour type for instance: cvs update -l (does not update
- cvs history -e | grep file to get the history logs for the
file for all types of operations carried out on the file (commit,
checkout, removal, addition, etc.) by the currently logged in user.
- how to undo a cvs remove ?
Need to login into the server and move things from the Attic back to the
Binary Files: recovery from mistaken archival as Text
- From unix: cvs admin -kb filename
- Copy over the working, old, undamaged file
- From Windows with WinCVS
Commit checking option "archive also if not modified"
This seems to result in the CVS command:
- cvs commit -f -m "......"