There is no CVS command designed
specifically to move a file or file directory. In fact,
CVS's design doesn't accomodate
such moves. However, you can work around this limitation using a
combination of CVS commands, or by altering the repository using
operating-system commands. Moving files can make project history
difficult to track, because then a file's history is
recorded across two different files in different locations. Minimize
this potential source of confusion by recording the new and old
locations with meaningful log messages.
To rename a file or directory at the operating-system level, move it
from the old filename to the new filename. For example, use the Unix
mv command.
3.8.1 Moving Files
The
recommended way to move a file is to use cvs
remove followed by cvs add, with
messages that state where the file was moved from and to. This method
preserves the file's history and allows reversion to
earlier versions of the project in its old location. However, the
messages stored with the add and
remove commands are the only record of the move.
Example 3-19 shows this method being used to rename
the wizzard.h file.
Example 3-19. Renaming a file
bash-2.05a$ mv wizzard.h config.h
bash-2.05a$ cvs remove wizzard.h
cvs server: scheduling `wizzard.h' for removal
cvs server: use 'cvs commit' to remove this file permanently
bash-2.05a$ cvs add config.h
cvs server: scheduling file `config.h' for addition
cvs server: use 'cvs commit' to add this file permanently
bash-2.05a$ cvs commit
.
.
.
Moving src/wizzard.h to src/config.h
CVS: ---------------------------------------------------------------------
CVS: Enter Log. Lines beginning with `CVS:' are removed automatically
CVS:
CVS: Committing in .
CVS:
CVS: Added Files:
CVS: config.h
CVS: Removed Files:
CVS: wizzard.h
CVS: ---------------------------------------------------------------------
.
.
.
RCS file: /var/lib/cvs/wizzard/src/config.h,v
done
Checking in config.h;
/var/lib/cvs/wizzard/src/config.h,v <-- config.h
initial revision: 1.1
done
Removing wizzard.h;
/var/lib/cvs/wizzard/src/wizzard.h,v <-- wizzard.h
new revision: delete; previous revision: 1.5
done
3.8.2 Moving Directories
The
recommended way to move a directory is to create and add the new
directory. Use the technique described in the previous section to
move all the files in the original directory to their new location,
and use the -P flag for all checkouts and
updates. By maintaining the old directory, previous releases of the
project can be retrieved and the old copies of files that were in
that directory are still stored in the repository.
Another way to move files or directories is to edit the repository
directly. See Chapter 6 for methods and their
advantages and consequences.