You may want to view the archives.
Binary files
- CVS can handle binary files, but you must have RCS release 5.5 or later and a release of GNU diff that supports the `-a' flag (release 1.15 and later are OK). You must also configure both RCS and CVS to handle binary files when you install them. Keword substitution can be a source of trouble with binary files. See section Keyword substitution, for solutions.
- If some of the files you want to import are binary, you may want to use the wrappers features to specify which files are binary and which are not. See section The cvswrappers file.
- Adding files to a directory
To add a new file to a directory, follow these steps.
Unlike most other commands, the add command is not recursive. You cannot even type `cvs add foo/bar'! Instead, you have to
- You must have a working copy of the directory. See section Getting the source.
- Create the new file inside your working copy of the directory.
- Use `cvs add filename' to tell CVS that you want to version control the file. If the file contains binary data, specify `-kb' (see section Handling binary files).
- Use `cvs commit filename' to actually check in the file into the repository. Other developers cannot see the file until you perform this step.
- You can also use the add command to add a new directory.
$ cd foo $ cvs add bar
- How to handle binary files with cvs import Use the `-k' wrapper option to tell import which files are binary. See section The cvswrappers file.
- Handling binary files
There are two issues with using CVS to store binary files. The first is that CVS by default convert line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client (for example, carriage return followed by line feed for Windows NT).
The second is that a binary file might happen to contain data which looks like a keyword (see section Keyword substitution), so keyword expansion must be turned off.
The `-kb' option available with some CVS commands insures that neither line ending conversion nor keyword expansion will be done. If you are using an old version of RCS without this option, and you are using an operating system, such as unix, which terminates lines with linefeeds only, you can use `-ko' instead; if you are on another operating system, upgrade to a version of RCS, such as 5.7 or later, which supports `-kb'.
Here is an example of how you can create a new file using the `-kb' flag:
$ echo '$Id$' > kotest
$ cvs add -kb -m"A test file" kotest
$ cvs ci -m"First checkin; contains a keyword" kotest
If a file accidentally gets added without `-kb', one can use the cvs admin command to recover. For example:
$ echo '$Id$' > kotest
$ cvs add -m"A test file" kotest
$ cvs ci -m"First checkin; contains a keyword" kotest
$ cvs admin -kb kotest
$ cvs update -A kotest
$ cvs commit -m "make it binary" kotest # For non-unix systems
When you check in the file `kotest' the keywords are expanded. (Try the above example, and do a cat kotest after every command). The cvs admin -kb command sets the default keyword substitution method for this file, but it does not alter the working copy of the file that you have. The easiest way to get the unexpanded version of `kotest' is cvs update -A. If you need to cope with line endings (that is, you are using a CVS client on a non-unix system), then you need to check in a new copy of the file, as shown by the cvs commit command above.
However, in using cvs admin -k to change the keyword expansion, be aware that the keyword expansion mode is not version controlled. This means that, for example, that if you have a text file in old releases, and a binary file with the same name in new releases, CVS provides no way to check out the file in text or binary mode depending on what version you are checking out. There is no good workaround for this problem.
You can also set a default for whether cvs add and cvs import treat a file as binary based on its name; for example you could say that files who names end in `.exe' are binary. See section The cvswrappers file.
posted by John Tobler 4/28/2000 04:11:07 PM