Download presentation
Presentation is loading. Please wait.
1
An Intro to Concurrent Versions System (CVS)
ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University
2
What is CVS? CVS What does it do? What is it not?
is a version (or revision) control system maintains entire history of source file (for each change: who, when, and why) is open-source and free (unlike SourceSafe) What does it do? stores entire history of each file efficiently allows multiple people to work simultaneously enables retrieval of old systems helps to manage different versions, releases works well over WAN (server/client) works for any ASCII file, and limited support for binary What is it not? a build system a substitute for management or communication
3
Why CVS? Problem: how to coordinate source file changes from multiple developers? Solution #1: Manual merging and coordination Solution #2: lock-modify-unlock (RCS, SCCS) Solution #3: concurrent development (CVS)
4
How CVS manages changes
Scenarios: People work on different files trivial People work on different parts of the same file CVS essentially runs ‘diff’ People work on the same part of the same file CVS alerts user, requires manual merging of changes
5
CVS model Server (Unix/Linux) Local machine (any O/S)
checkout, update, diff Respository: central, official copy, as well as entire history Local copy: used for editing add, remove, commit, tag Note: checkout is a one-time operation
6
CVS directory structure
Repository on server Copy on local machine /pub/cvsprojects/ece417 | +--CVSROOT (admin. files) +--3dmm | +-- data | main.cpp,v | database.cpp,v | +-- ui | MainFrame.cpp,v | SettingsDlg.cpp,v | +--klt-ui +--bibtex-manager ... C:/user/me/mycode | +--CVS (admin. files) | +--data +-- CVS (admin. files) +-- main.cpp +-- database.cpp +--ui +-- MainFrame.cpp +-- SettingsDlg.cpp Note: All information stored on a per-file basis
7
Pserver authentication
Each CVS command needs to authenticate you Instead of a password for each command, first login Steps: cvs login (server checks its passwd file; if no passwd, then falls back to Unix system authentication) now your password is stored locally in ~/.cvspass local password is automatically used in the future as long as it’s there CVS_PASSFILE can be used to change location of .cvspass Note: pserver authentication provides minimal security; do NOT use an important password
8
CVS commands Syntax: cvs [goptions] command [coptions] [arguments]
Example: cvs -d login Common commands: cvs checkout modules ; create private copy cvs update ; incorporate others’ changes into private copy cvs add file ; add private file to repository cvs remove file ; remove file from repository cvs commit file ; publish changes to others Customizing: .cvsrc file contains default options, both global and command-specific
9
Create / checkout module
To put a directory under CVS control, cvs import –m “New file” foo me start All files in current directory are stored in foo subdirectory of repository -m “New file” specifies the log comment foo is directory name in repository me is vendor tag (can be anything) start is start tag (can be anything) To checkout a directory, cvs checkout foo All files in foo subdirectory of repository are copied to current directory
10
Changing files To add a file to the repository,
cvs add file ; takes effect at the next commit To remove a file from the repository, cvs remove file ; takes effect at the next commit To commit changes you’ve made to a file, cvs commit files To tag a file revision, cvs tag –c MyProject-v files (-c warns and aborts if source files are not up-to-date)
11
Bringing files up to date
To bring local files up to date, cvs update All files in current directory are updated using repository For each file, prints one-letter code: U (update): your file has been updated with someone’s changes M (merge): same, but you had made changes to the file, too C (conflict): same, but CVS could not merge the changes ? (unknown): file is not under CVS control Note: You cannot commit a file unless it’s up-to-date
12
Other useful commands To get information about a file,
cvs status file To examine a file’s log, cvs log file To see who made what change, cvs annotate file
13
Conflicts If two people modify the same part of a file, there is a conflict CVS retains both sets of changes in the file, separated by <<<< (changes1) ==== (changes2) >>>> Example: main() { <<<<<<< hello.c puts("Hello, World!"); ======= printf("Hello World"); >>>>>>> 1.2 }
14
Setting up server Create a CVS repository if there is not already one
Add this to /etc/services: cvs 2401/tcp # remote cvs server Add this to /etc/inetd.conf: cvs stream tcp nowait root /path/to/cvs cvs pserver Restart inetd To encrypt password for CVSHOME/passwd file, /usr/local/bin/perl e 'print crypt("MyPassword","St") . "\n";‘ copy and paste into passwd file as name:epswd To use RSH instead, use :ext instead of :pserver for CVSROOT. Might want to add set CVS_RSH to ssh which makes CVS use SSH and encryption for remote access. Initialize CVS repository, cvs –d /usr/local/cvsrep init ; sets up CVSROOT directory
15
Versions and revisions
Each file has a unique revision number Even number of dot-separated integers (start with 1.1) Successive revisions increment the rightmost number Each branch has a unique branch number Number appended to revision number Correspond to user versions
16
Suggested CVS policies
Each file has an owner You may completely modify your own file (but don’t change class interface) make minor/obvious bug fixes to others’ files, but only if 100% confident (also notify them, just in case) ask for permission before making bigger changes, or request the change from the developer Alternative: You are never allowed to modify anyone else’s file Good: no chance of conflict Bad: extra overhead, not taking advantage of the “C” in CVS (might as well be using lock-modify-unlock)
17
Other suggestions Make sure system clock reflects real time
Frequently update (stay in sync with repository) Frequently commit changes (once compiled, completed, tested, reviewed) Do NOT share code except via repository (e.g., s) Build early, build often (BEBO) Tag early, tag often Save executables associated with tagged builds
18
Obtaining CVS CvsGui (WinCVS/MacCvs,gCvs): Download and install; this is a GUI front-end and also includes CVS (latest version: 1.2) CVS: If you just want the command-line version; documentation is here, too (latest version: 1.11)
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.