430 likes | 644 Views
ì œ 17 ê°• : Managing Source Files CVS. Managing Source Files CVS (Concurrent Versions System). Typical Source Codes. src. dir1. dir2. dir3. dir4. sys.h inode.h user.h driver.c stream.c hd.c vm.h file.h read.h intrp.c signal.c strategy.c
E N D
제17강 : Managing Source Files CVS Managing Source Files CVS (Concurrent Versions System)
Typical Source Codes • src . . . . . dir1 dir2 dir3 dir4 sys.h inode.h user.h driver.c stream.c hd.c vm.h file.h read.h intrp.c signal.c strategy.c cdev.h bdev.h type.h file.c write.c sleep.c init.h flt.h mount.h nfs.c super.c win.c obj.h text.h abs.h ftp.c telet.c fill.c . . . . . . . .
Typical Source Codes • src . . . . . dir1 dir2 dir3 dir4 Bob flash memory file.c file.c John Testing sys.h inode.h user.h driver.c stream.c hd.c vm.h file.h read.h intrp.c signal.c strategy.c cdev.h bdev.h type.h file.c write.c sleep.c init.h flt.h mount.h nfs.c super.c win.c obj.h text.h abs.h ftp.c telnet.c fill.c . . . . . . . . file,c file,c file.c Tom mpeg3 file.c file.c file.c file.c Peter booting file.c file.c
Typical Source Codes • src . . . . . dir1 dir2 dir3 dir4 Bob flash memory John Testing sys.h inode.h user.h driver.c stream.c hd.c vm.h file.h read.h intrp.c signal.c strategy.c cdev.h bdev.h type.h file.c write.c sleep.c init.h flt.h mount.h nfs.c super.c win.c obj.h text.h abs.h ftp.c telnet.c fill.c . . . . . . . . Tom mpeg3 Peter booting
Everybody makes copy of files 8000 files P men # of people P*8000 files
Many Releases 8000 files P men 95 P*8000 8000 files P men P*8000 98
Many people, Many Releases 8000 files P men 95 P*8000 8000 files P men P*8000 98 # of revisions P*R*8000 8000 files P men P*8000 00
Number of Files to Manage word 1.1 (** 1st version is called “Baseline”) Revision (Replacement) word French word Russian word 1.2 word 1.3 Branch or Variation (Alternative – eg: for different Hardware’s, uses)
100*10*10*8000 80,000,000 files! Many people, releases, branches 8000 files P men 95 P*8000 8000 files P men P*8000 98 P*R*B*8000 8000 files P men P*8000 00 # of branches
Typical System • Situation: • m persons, p files • concurrent/independent work • Access Control: anyone update any file? • Concurrent Update: two work on same file? • History/undo: who/file/action/date/
Terminology Original Files Access Control History CVS System • Repository Directory • Place where master source is stored • Check-out • Take a copy of file(s) from master source • Commit (Check-in) • local change master source • Revision • Each change to a file • Project • Collection of files (tree name) Repository Directory Master Source Check out Check in Check out Check in Private Directory Private Directory A’s Working Copy B’s Working Copy Edit File(s) Edit File(s)
Original Files Repository A.c Files stored in repository become “master source” CVS CVS attaches extra info such as : access control info history version info ….
Original Files Remove original files now. Afterwards, you can not simply “vi”. Always check out first, Then you can do vi Bob A.c Repository Check-out modify vi Access Control A.c CVS
Bob vi Repository A.c < old > modify A.c Commit(Check-in) CVS A.c < new > System updates master copy records history version #
Repository modify A.c Commit (Check-in) CVS A.c Later Print history undo …
CVS Command Original Files Bob vi Repository (2) Checkout A.c • Import • (Make master copy • in repository) A.c modify CVS (3) Commit (Checkin) Bob vi A.c (4) History ...
CVS Lab Exercise man cvs Make repository directory Create master source (import) Checkout Modify Commit (checkin)
$HOME cvs_ex src Source Original Original source files are under …./src Example cd $HOME/cvs_ex ls src/ /*all source files are under src*/
original source files home cvs_ex src my_dir1 my_dir2 Original Source
$HOME cvs_ex src master Original Source Createrepository directory for future master source ** Make repository directory Make master source (import) Checkout Modify Commit (checkin) Example cd $HOME/cvs_ex ls src /*all source files are under src*/ cvs -d `pwd`/masterinit /*makerepository dir */ export CVSROOT=`pwd`/master /* register CVS repository in env. variable*/ ls $HOME/cvs_ex /*now you see the new directory master*/
home cvs_ex src my_dir1 my_dir2 master Original Source creating repository directory
$HOME cvs_ex src master s2 Original Source Master Source Create master source under repository directory Make repository directory ** Make master source (import) Checkout Modify Commit (checkin) System knows where the master file directory is . cd to src. Example cd $HOME/cvs_ex/src/* cd to original source file directory */ /* copy original src master */ cvsimport–m “s1” s2 s3 v1_1 message project vendor version (sub-tree) cd to master directory – new directory s2 created here ls -l s2/ see files with comma …? no write permission
home cvs_ex src my_dir1 my_dir2 master s2 Original Source CVSROOT Master Source creating master source files
home cvs_ex src my_dir1 my_dir2 master s2 Original Source CVSROOT Master Source after creating master source
home cvs_ex Check-out from master source to working directory src my_dir1 my_dir2 master s2 s2 Make repository directory Make master source (import) ** Checkout (copy all files) Modify Commit (checkin) My Source Master Source Example cd $HOME/cvs_ex/my_dir1 /* time to do coding here */ cvs checkout s2 /* copy files: give project name=s2*/ ls cd s2 ls -l System knows where the master file directory is. cd to my dir. Checkout. Run vi in my dir.
home cvs_ex src my_dir1 my_dir2 master s2 s2 CVSROOT My source Master Source checkout
home cvs_ex Modify file Commit src my_dir1 my_dir2 master s2 s2 Make repository directory Make master source (import) ** Checkout (copy all files) Modify Commit (checkin) My Source Master Source Example cd $HOME/cvs_ex/my_dir1 /* time to do coding here */ cd s2 vi test1.c /* modify file*/ cvs commit test1.c /* Commit. Give any message-to log*/ cvs log test1.c /*see history*/
Multiple Developers -- Status -- = me master • Up to date • My file = master copy in the repository (latest version) • Locally Modified • I edited, not committed my changes to master copy yet • Needs Patch • he committed newer version to master copy • (my copy is not modified yet) • What is his modification? • Needs Merge • I made modification, • he also committed newer version to master copy me master he me master he me master
src Multiple Developersscenario: need patch master • developer “me” • cvs checkout s2 at dir1 • developer “he” • cvs checkout s2 at dir2 • vi this.c; • cvs commit –m “add two” this.c • “his” change is not reflected in dir1 yet • developer “me” cvs update this.c dir1 dir2 me he (2) (1) me he master
Multiple Developersscenario: need merge • developer “he” • vi this.c; /* add printf(“two”); */ • cvs commit –m “add two” this.c • developer “me” • vi this.c; /* add printf(“one”); */ • cvscommit –m “add one” this.c • cvs status this.c “status: Needs Merge …” • cvs update this.c “Merging differences …” (2) (1) me he master
manual merge me master • cvs update this.c Merging differences … warning: conflicts during merge in this.c this.c: void test() { <<<<<<<< this.c printf(“one”); developer-1’s code ======= printf(“two”); developer-2’s code >>>>>>>> } • Fix them manually. Delete {>>>, <<<, = = =} • cvs commit this.c
add/remove files • to add files • create new files in working directory • cvs add filename cvs commit filename • to remove files • remove files from working directory (rm …) • cvs remove filename cvs commit filename
Managing Branches word 1.1(** 1st version is called “Baseline”) Revision (Replacement) D3 D1 D2 word 1.2 English French Russian word 1.3 Branch or Variation (Alternative – eg: for different Hardware’s, uses)
Branches • cd dir1 • cvs tagrelease-1 tag all files gives symbolic name to files • cvs checkout-rrelease-1 s2 • now this release-1 is our new base. copy from this release. NOT from newest version all subsequent commits go to release-1 master release-1
Branches • To create new branch from this version cvs rtag -b -rrelease-1release-1-patches project_name another new branch • To get a working copy cvs checkout -rrelease-1-patches project_name master release-1 create new branch from this version new branch
merge (branch & main tree) • First release the patched version • cd • cvs release -d project_name • To merge release-1 & release-1-patches • cvs checkout -j release-1-patches project_name • To commit all files changed by merge of release-1-patch into source tree • cvs commit -m “merged”
Versions • MRF (Modification Request Form) • Change control authority–approves DB • Change tracking authority • CVS administrator • Check out, modify, Unit test, other tests • lint, coverage, review …DB CASE IDE
CVS command arguments • init create repository directory • import plain source --> repository cvs files • checkout repository --> my working directory • commit my working dir --> repository memorize modification, versioning • update repository --> my working dir modified files only or specified version only • log view history
misc • SCCS AT&T, Bell Lab (Source Code Control System) • RCS lock/unlock open source code single host • CVS client/serverenvironment network, multi-user (do CVS after telnet) copy/merge If conflict: CVS requests hand-editing to resolve conflict Notify service : via email if file(s) are modified by others.
Bonsai (ctags continued) • Basically, a tree control • Web-based tool for watching the up-to-the-minute goings-on in CVS (Concurrent Versions System) repository • Allows queries on the contents of a CVS archive • get a list of checkins • see what checkins have been made • by a given person, • given CVS branch, • in a particular time period
(Cont’d) • Also includes tools for : • looking at checkin logs (and comments) • doing diffs between various versions of a file • finding out what person is responsible for changing a particular line of code(“cvsblame”)