An Intro to Concurrent Versions System CVS ECE

  • Slides: 18
Download presentation
An Intro to Concurrent Versions System (CVS) ECE 417/617: Elements of Software Engineering Stan

An Intro to Concurrent Versions System (CVS) ECE 417/617: Elements of Software Engineering Stan Birchfield Clemson University

What is CVS? • CVS – is a version (or revision) control system –

What is CVS? • CVS – 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 Source. Safe) • 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

Why CVS? • Problem: how to coordinate source file changes from multiple developers? –

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)

How CVS manages changes • Scenarios: – People work on different files trivial –

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

CVS model Server (UNIX/Linux) Local machine (any O/S) checkout, update, diff Respository: central, official

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

CVS directory structure Repository on server /pub/cvsprojects/ece 417 | +--CVSROOT (admin. files) +--3 dmm

CVS directory structure Repository on server /pub/cvsprojects/ece 417 | +--CVSROOT (admin. files) +--3 dmm | +-- data | +-- main. cpp, v | +-- database. cpp, v | +-- ui | +-- Main. Frame. cpp, v | +-- Settings. Dlg. cpp, v | +--klt-ui +--bibtex-manager. . . Copy on local machine C: /user/me/mycode | +--CVS (admin. files) | +--data +-- CVS (admin. files) +-- main. cpp +-- database. cpp +--ui +-- CVS (admin. files) +-- Main. Frame. cpp +-- Settings. Dlg. cpp Note: All information stored on a per-file basis

Pserver authentication • Each CVS command needs to authenticate you • Instead of a

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

CVS commands • Syntax: cvs [goptions] command [coptions] [arguments] • Example: cvs -d :

CVS commands • Syntax: cvs [goptions] command [coptions] [arguments] • Example: cvs -d : pserver: me@cvs. ces. clemson. edu: /pub/cvsprojects/ece 417 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

Create / checkout module • To put a directory under CVS control, cvs import

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

Changing files • To add a file to the repository, cvs add file ;

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 My. Project-v 1. 0. 0. 0 files (-c warns and aborts if source files are not up-to-date)

Bringing files up to date • To bring local files up to date, cvs

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-todate

Other useful commands • To get information about a file, cvs status file •

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

Conflicts • If two people modify the same part of a file, there is

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 <<<< (changes 1) ==== (changes 2) >>>> • Example: main() { <<<<<<< hello. c puts("Hello, World!"); ======= printf("Hello World"); >>>>>>> 1. 2 }

Setting up server • • Create a CVS repository if there is not already

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: • • Restart inetd To encrypt password for CVSHOME/passwd file, cvs stream tcp nowait root /path/to/cvs pserver – /usr/local/bin/perl -e 'print crypt("My. Password", "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

Versions and revisions • Each file has a unique revision number – Even number

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

Suggested CVS policies • Each file has an owner • You may – completely

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)

Other suggestions • Make sure system clock reflects real time • Frequently update (stay

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. , emails) • Build early, build often (BEBO) • Tag early, tag often • Save executables associated with tagged builds

Obtaining CVS • Recommendation: – Download and install the GUI front-end (which also includes

Obtaining CVS • Recommendation: – Download and install the GUI front-end (which also includes CVS) – Cvs. Gui (Win. Cvs/Mac. Cvs/gcvs) http: //www. wincvs. org • Alternative interface: Tortoise. CVS http: //www. tortoisecvs. org • Or, if you just want the command-line version, install CVS directly: http: //www. cvshome. org