There are certain file names that frequently occur inside your working copy, but that you don't want to put under cvsnt control. Examples are all the object files that you get while you compile your sources. Normally, when you run cvs update, it prints a line for each file it encounters that it doesn't know about (the section called “update output”).
cvsnt has a list of files (or sh(1) file name patterns) that it should ignore while running update, import and release. This list is constructed in the following way.
The list is initialized to include certain file name patterns: names associated with cvsnt administration, or with other common source control systems; common names for patch files, object files, archive files, and editor backup files; and other names that are usually artifacts of assorted utilities. Currently, the default list of ignored file name patterns is:
. .. core RCSLOG tags TAGS RCS SCCS .make.state .nse_depinfo #* .#* cvslog.* ,* CVS CVS.adm .del-* *.a *.olb *.o *.obj *.so *.Z *~ *.old *.elc *.ln *.bak *.BAK *.orig *.rej *.exe *.dll *.pdb *.lib *.ncb *.ilk *.exp .DS_Store _$* *$
The per-repository list in $REAL_CVSROOT/CVSROOT/cvsignore is appended to the list, if that file exists.
The per-user list in .cvsignore in your home directory is appended to the list, if it exists.
Any entries in the environment variable $CVSIGNORE is appended to the list.
Any -I options given to cvsnt is appended.
As cvsnt traverses through your directories, the contents of any .cvsignore will be appended to the list. The patterns found in .cvsignore are only valid for the directory that contains them, not for any sub-directories.
In any of the 5 places listed above, a single exclamation mark (!) clears the ignore list. This can be used if you want to store any file which normally is ignored by cvsnt.
Specifying -I ! to cvs import will import everything, which is generally what you want to do if you are importing files from a pristine distribution or any other source which is known to not contain any extraneous files. However, looking at the rules above you will see there is a fly in the ointment; if the distribution contains any .cvsignore files, then the patterns from those files will be processed even if -I ! is specified. The only workaround is to remove the .cvsignore files in order to do the import. Because this is awkward, in the future -I ! might be modified to override .cvsignore files in each directory.
Note that the syntax of the ignore files consists of a series of lines, each of which contains a space separated list of filenames. This offers no clean way to specify filenames which contain spaces, but you can use a workaround like foo?bar to match a file named foo bar (it also matches fooxbar and the like). Also note that there is currently no way to specify comments.