geekstuff | gameswf | Textweb | Chunked LOD | dumbuild |
Cheat sheets: CVS | cygwin | Debian | Emacs | MythTV |
So I don't forget, here are a couple handy recipes for using CVS. For some reason the official manual never fails to confuse me.
Assume you want to work on a project named "myproject". All the working sources for the project are in ~/src/myproject . You have a server somewhere on the Internet, called some.server.net, where you want to keep your CVS repository. You need login access to some.server.net, where your username is "username".
Don't bother with pserver; it's insecure and a PITA. Use ssh. Do this to enable usage of ssh:
# export CVS_RSH=ssh
Now you're pretty much good to go. Commands which need to specify a CVSROOT will look like this:
# cd ~/src
# cvs -d:ext:username@some.server.net:/home/username/cvsroot checkout myproject
Let's say you want to get myproject into cvs for the first time. From the project root dir:
# cvs -d ... import -m "Imported" repository_dir_under_cvsroot vendor_tag start_tag
e.g.
# cd ~/src/myproject
# cvs -d:ext:username@some.server.net:/home/username/cvsroot import -m "Imported" myproject tulrich start
At this point you'll want to move the original myproject to a different name (for backup), and checkout the sources from the cvs repository. Once everything is working you'll want to delete (or archive) the old myproject directory, so you don't work in it by mistake.
Don't bother setting the environment variable -- it's not necessary. The key things to know are:
To initially checkout a module, specify the CVSROOT on the command line, using "-d":
# cd ~/src
# cvs -d:ext:username@some.server.net:/home/username/cvsroot co myproject
That puts a clean copy of myproject into ~/src/myproject.
once you've checkout'ed a module, once you cd into that module's directory tree, CVS knows where the CVSROOT is (it keeps that info in the "CVS" directory inside each working dir).
# cd ~/src/myproject
# cvs update
etc... just start using cvs commands, and the correct CVSROOT is used automatically.
To automatically turn on the -kb option based on file extension (to handle binary files without munging them), you can use the admin file "CVSROOT/cvswrappers". First do this to get the admin files:
# cd myproject
# cvs co CVSROOT
Now edit or add CVSROOT/cvswrappers , and commit your changes. Here's an example:
---- example taken from http://www.kryptonians.net/cvs/server_setup.html ---- # This file affects handling of files based on their names. # # The -t/-f options allow one to treat directories of files # as a single file, or to transform a file in other ways on # its way in and out of CVS. # # The -m option specifies whether CVS attempts to merge files. # # The -k option specifies keyword expansion (e.g. -kb for binary). # # Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) # # wildcard [option value][option value]... # # where option is one of # -f from cvs filter value: path to filter # -t to cvs filter value: path to filter # -m update methodology value: MERGE or COPY # -k expansion mode value: b, o, kkv, &c # # and value is a single-quote delimited value. # For example: #*.gif -k 'b' *.gif -k 'b' *.tga -k 'b' *.bmp -k 'b' *.psd -k 'b' *.tif -k 'b' *.png -k 'b' *.iff -k 'b' *.aiff -k 'b' *.obj -k 'b' *.dat -k 'b' *.exe -k 'b' *.com -k 'b' *.dll -k 'b' *.dsw -k 'b' *.dsp -k 'b' *.lwo -k 'b' *.lws -k 'b' *.p -k 'b' *.ico -k 'b' *.frx -k 'b' *.class -k 'b' *.jar -k 'b' *.zip -k 'b' *.lzh -k 'b' *.lha -k 'b' *.rar -k 'b' *.arj -k 'b' *.arc -k 'b' *.avi -k 'b' *.mov -k 'b' *.asf -k 'b' *.smk -k 'b' *.jpg -k 'b' *.mpg -k 'b' *.swf -k 'b' *.frx -k 'b' *.fli -k 'b' *.flc -k 'b' *.tiff -k 'b' *.bin -k 'b' *.dat -k 'b' *.wad -k 'b' *.ppt -k 'b' *.pdf -k 'b' *.3ds -k 'b' *.max -k 'b' *.srt -k 'b' *.srm -k 'b' *.srp -k 'b' ---- end example ----