CVS is a popular free revision control system. It is designed to allow one or more people to work on the same project, keeping checked in versions of files in a common repository. Its main use is for managing source code in projects with multiple developers, and it includes some pretty nifty support for merging independent changes to text files. In fact, using some sort of revision control is almost required for any reasonably complex software project. The revision tracking features are pretty handy even when working alone. You can go back to any revision of your files that was ever checked into the repository, either by revision number or date. I use it for the revision tracking features for all of my web pages, lectures, exams, papers, ....
In our case, you will be checking in your assignment files, and the TA and I will be checking them out to grade. I encourage you to check in changes often, but in the end you just need to make sure the required files are checked in for each assignment by the deadline.
First, you must check out your directories from the repository. This will give you your own working copy of the files. Do not attempt to work directly in the repository, CVS will get quite confused if you do this, and we probably won't be able to check out your code to grade it. On the GL systems, you'd use a command like this
cvs -d /afs/umbc.edu/users/o/l/olano/pub/cs435 checkout -d directory_name_of_your_choice your_umbc_loginFor example, I might do this:
cvs -d /afs/umbc.edu/users/o/l/olano/pub/cs435 checkout -d cs435work olano
This is the only time you need to tell it where the repository is. After the intial checkout, once you cd into your working directory, CVS can figure out which repository to use. All of the major CVS commands apply to the current directory and all directories under it.
Edit away... No need to do anything special
If you add files, you need to let CVS know so they'll be checked in:
cvs add file
To tell CVS you're removing a file (so it won't come back next time you update — see below):
cvs remove -f file
To tell CVS to ignore a file (executable, rib or tif file you generate, for example), add it to the list in the .cvsignore file in that directory.
Your changed or added files are not copied to the repository until you check them in. You must do this for us to be able to check out and grade your work, but you can do it as many times as you want before then. First do this:
cvs -q update
Files CVS doesn't know about will be listed with a '?'. Next, tell CVS to add or ignore each of them, then try the update again. It's good practice to make sure CVS knows about every file before you commit any check in.
Now check them into the repository:
cvs commit
An editor will pop up, showing you a listing of what will be checked in. You can enter a log message here to say what was in the checkin. This message is for you: I will not look at the log messages for grading, but it can be useful if you want to look back at old versions later. You can change editors by setting the EDITOR environment variable (the default editor is vi), but you must quit that instance of the editor after writing your log message for the commit to complete.
Now check to make sure it worked:
cvs -q update
This time, it shouldn't list any files. If it does, something went wrong. Make sure you've tolc CVS to add or ignore if necessary, and try again, or ask for help.
If I make any changes to the initial sample files (or add some for the later assignments), you can get these using
cvs update
You can also use the update command to get previous revisions of your work (check in your working version first, or you'll lose it!)
cvs update -D date file
To get back to the most recent version
cvs update -A
or you can just compare them
cvs diff -D date file
To figure out which revision is which (assuming you entered reasonable log messages when you committed your changes), do
cvs log file
List of all CVS commands
cvs help
Help on any one CVS command
cvs --help command
General CVS manuals, downloads, etc.: www.cvshome.org