RCS—ASystemforVersionControl WalterF.Tichy DepartmentofComputerSciences PurdueUniversity WestLafayette,Indiana47907 ABSTRACT Animportantprobleminprogramdevelopmentandmaintenanceisversion control,i.e.,thetaskofkeepingasoftwaresystemconsistingofmanyversionsand configurationswellorganized.TheRevisionControlSystem(RCS)isasoftware toolthatassistswiththattask.RCSmanagesrevisionsoftextdocuments,in particularsourceprograms,documentation,andtestdata.Itautomatesthestoring,retrieval,loggingandidentificationofrevisions,anditprovidesselection mechanismsforcomposingconfigurations.Thispaperintroducesbasicversion controlconceptsanddiscussesthepracticeofversioncontrolusingRCS.For conservingspace,RCSstoresdeltas,i.e.,differencesbetweensuccessiverevisions. Severaldeltastoragemethodsarediscussed.UsagestatisticsshowthatRCS’s deltastoragemethodisspaceandtimeefficient.Thepaperconcludeswitha detailedsurveyofversioncontroltools. Keywords:configurationmanagement,historymanagement,versioncontrol, revisions,deltas. 1995/06/01 RCS—ASystemforVersionControl WalterF.Tichy DepartmentofComputerSciences PurdueUniversity WestLafayette,Indiana47907 1.Introduction Versioncontrolisthetaskofkeepingsoftwaresystemsconsistingofmanyversionsandconfigurationswellorganized.TheRevisionControlSystem(RCS)isasetofUNIXcommandsthat assistwiththattask. RCS’primaryfunctionistomanagerevisiongroups.Arevisiongroupisasetoftextdocuments,calledrevisions,thatevolvedfromeachother.Anewrevisioniscreatedbymanuallyeditinganexistingone.RCSorganizestherevisionsintoanancestraltree.Theinitialrevisionisthe rootofthetree,andthetreeedgesindicatefromwhichrevisionagivenoneevolved.Besides managingindividualrevisiongroups,RCSprovidesflexibleselectionfunctionsforcomposingconfigurations.RCSmaybecombinedwithMAKE1,resultinginapowerfulpackageforversioncontrol. RCSalsooffersfacilitiesformergingupdateswithcustomermodifications,fordistributed softwaredevelopment,andforautomaticidentification.Identificationisthe‘stamping’ofrevisionsandconfigurationswithuniquemarkers.Thesemarkersareakintoserialnumbers,telling softwaremaintainersunambiguouslywhichconfigurationisbeforethem. RCSisdesignedforbothproductionandexperimentalenvironments.Inproductionenvironments,accesscontrolsdetectupdateconflictsandpreventoverlappingchanges.Inexperimentalenvironments,wherestrongcontrolsarecounterproductive,itispossibletoloosenthecontrols. AlthoughRCSwasoriginallyintendedforprograms,itisusefulforanytextthatisrevised frequentlyandwhosepreviousrevisionsmustbepreserved.RCShasbeenappliedsuccessfullyto storethesourcetextfordrawings,VLSIlayouts,documentation,specifications,testdata,form lettersandarticles. ThispaperdiscussesthepracticeofversioncontrolusingRCS.Italsointroducesbasicversioncontrolconcepts,usefulforclarifyingcurrentpracticeanddesigningsimilarsystems. AnearlierversionofthispaperwaspublishedinSoftware—Practice&Experience15,7(July1985), 637-654.

-2-Revisiongroupsofindividualcomponentsaretreatedinthenextthreesections,andtheexten-sionstoconfigurationsfollow.Becauseofitssize,asurveyofversioncontroltoolsappearsatthe endofthepaper. 2.GettingstartedwithRCS Supposeatextfilef.cistobeplacedundercontrolofRCS.Invokingthecheck-incommand cif.c createsanewrevisiongroupwiththecontentsoff.castheinitialrevision(numbered1.1)and storesthegroupintothefilef.c,v.Unlesstoldotherwise,thecommanddeletesf.c.Italsoasks foradescriptionofthegroup.Thedescriptionshouldstatethecommonpurposeofallrevisions inthegroup,andbecomespartofthegroup’sdocumentation.Alllatercheck-incommandswill askforalogentry,whichshouldsummarizethechangesmade.(Thefirstrevisionisassigneda defaultlogmessage,whichjustrecordsthefactthatitistheinitialrevision.) Filesendingin,varecalledRCSfiles(vstandsforversions);theothersarecalledworking files.Togetbacktheworkingfilef.cinthepreviousexample,executethecheck-outcommand: cof.c Thiscommandextractsthelatestrevisionfromtherevisiongroupf.c,vandwritesitintof.c.The filef.ccannowbeeditedand,whenfinished,checkedbackinwithci: cif.c Ciassignsnumber1.2tothenewrevision.Ifcicomplainswiththemessage cierror:nolocksetby<login> thenthesystemadministratorhasdecidedtoconfigureRCSforaproductionenvironmentby enablingthe‘strictlockingfeature’.Ifthisfeatureisenabled,allRCSfilesareinitializedsuch thatcheck-inoperationsrequirealockonthepreviousrevision(theonefromwhichthecurrent oneevolved).Lockingpreventsoverlappingmodificationsifseveralpeopleworkonthesamefile. Iflockingisrequired,therevisionshouldhavebeenlockedduringthecheck-outbyusingthe option−l: co−lf.c Ofcourseitistoolatenowforthecheck-outwithlocking,becausef.chasalreadybeenchanged; checkingoutthefileagainwouldoverwritethemodifications.(Topreventaccidentaloverwrites, cosensesthepresenceofaworkingfileandaskswhethertheuserreallyintendedtooverwriteit. Theoverwritingcheck-outissometimesusefulforbackinguptothepreviousrevision.)Tobe abletoproceedwiththecheck-ininthepresentcase,firstexecute -3-rcs−lf.c Thiscommandretroactivelylocksthelatestrevision,unlesssomeoneelselockeditinthemeantime.Inthiscase,thetwoprogrammersinvolvedhavetonegotiatewhosemodificationsshould takeprecedence. IfanRCSfileisprivate,i.e.,ifonlytheownerofthefileisexpectedtodepositrevisionsinto it,thestrictlockingfeatureisunnecessaryandmaybedisabled.Ifstrictlockingisdisabled,the owneroftheRCSfileneednothavealockforcheck-in.Forsafetyreasons,allothersstilldo. Turningstrictlockingoffandonisdonewiththecommands: rcs−Uf.candrcs−Lf.c ThesecommandsenableordisablethestrictlockingfeatureforeachRCSfileindividually.The systemadministratoronlydecideswhetherstrictlockingisenabledinitially. Toreducetheclutterinaworkingdirectory,allRCSfilescanbemovedtoasubdirectory withthenameRCS.RCScommandslookfirstintothatdirectoryforRCSfiles.AllthecommandspresentedaboveworkwiththeRCSsubdirectorywithoutchange.† Itmaybeundesirablethatcideletestheworkingfile.Forinstance,sometimesonewould liketosavethecurrentrevision,butcontinueediting.Invoking ci−lf.c checksinf.casusual,butperformsanadditionalcheck-outwithlockingafterwards.Thus,the workingfiledoesnotdisappearafterthecheck-in.Similarly,theoption−udoesacheck-infol-lowedbyacheck-outwithoutlocking.Thisoptionisusefulifthefileisneededforcompilation afterthecheck-in.Bothoptionsupdatetheidentificationmarkersintheworkingfile(seebelow). Besidestheoperationsciandco,RCSprovidesthefollowingcommands: identextractidentificationmarkers rcschangeRCSfileattributes rcscleanremoveunchangedworkingfiles(optional) rcsdiffcomparerevisions rcsfreezerecordaconfiguration(optional) rcsmergemergerevisions rlogreadlogmessagesandotherinformationinRCSfiles AsynopsisofthesecommandsappearsintheAppendix. 2.1.AutomaticIdentification RCScanstampsourceandobjectcodewithspecialidentificationstrings,similartoproduct andserialnumbers.Toobtainsuchidentification,placethemarker $Id$ intothetextofarevision,forinstanceinsideacomment.Thecheck-outoperationwillreplace †PairsofRCSandworkingfilescanactuallybespecifiedin3ways:a)botharegiven,b)onlythe workingfileisgiven,c)onlytheRCSfileisgiven.Ifapairisgiven,bothfilesmayhavearbitrary pathprefixes;RCScommandspairthemupintelligently.

-4-thismarkerwithastringoftheform $Id:filenamerevisionnumberdatetimeauthorstatelocker$ Thisstringneedneverbetouched,becausecokeepsituptodateautomatically.Topropagate themarkerintoobjectcode,simplyputitintoaliteralcharacterstring.InC,thisisdoneasfollows: staticcharrcsid[]="$Id$"; Thecommandidentextractssuchmarkersfromanyfile,inparticularfromobjectcode.Ident helpstofindoutwhichrevisionsofwhichmoduleswereusedinagivenprogram.Itreturnsa completeandunambiguouscomponentlist,fromwhichacopyoftheprogramcanbereconstructed.Thisfacilityisinvaluableforprogrammaintenance. Thereareseveraladditionalidentificationmarkers,oneforeachcomponentof$Id$.The marker $Log$ hasasimilarfunction.Itaccumulatesthelogmessagesthatarerequestedduringcheck-in.Thus, onecanmaintainthecompletehistoryofarevisiondirectlyinsideit,byenclosingitinacomment.Figure1isaneditedversionofalogcontainedinrevision4.1ofthefileci.c.Thelog appearsatthebeginningofthefile,andmakesiteasytodeterminewhattherecentmodifications were. /* *$Log:ci.c,v$ *Revision4.11983/05/1017:03:06wft *Addedoption−dand−w,andupdatedassignmentofdate,etc.tonewdelta. *Addedhandlingofdefaultbranches. * *Revision3.91983/02/1515:25:44wft *Addedcalltofastcopy()tocopyremainderofRCSfile. * *Revision3.81983/01/1415:34:05wft *AddedignoringofinterruptswhilenewRCSfileisrenamed; *avoidsdeletionofRCSfilesbyinterrupts. * *Revision3.71982/12/1016:09:20wft *Correctedcheckingofreturncodefromdiff. *AnRCSfilenowinheritsitsmodeduringthefirstcifromtheworkingfile, *exceptthatwritepermissionisremoved. */ Figure1.Logentriesproducedbythemarker$Log$. Sincerevisionsarestoredintheformofdifferences,eachlogmessageisphysicallystoredonce, independentofthenumberofrevisionspresent.Thus,the$Log$markerincursnegligiblespace overhead.

-5-3.TheRCSRevisionTree RCSarrangesrevisionsinanancestraltree.Thecicommandbuildsthistree;theauxiliary commandrcsprunesit.Thetreehasarootrevision,normallynumbered1.1,andsuccessiverevisionsarenumbered1.2,1.3,etc.Thefirstfieldofarevisionnumberiscalledthereleasenumber andthesecondonethelevelnumber.Unlessgivenexplicitly,thecicommandassignsanewrevisionnumberbyincrementingthelevelnumberofthepreviousrevision.Thereleasenumbermust beincrementedexplicitly,usingthe−roptionofci.Assumingtherearerevisions1.1,1.2,and1.3 intheRCSfilef.c,v,thecommand ci−r2.1f.corci−r2f.c assignsthenumber2.1tothenewrevision.Latercheck-inswithoutthe−roptionwillassignthe numbers2.2,2.3,andsoon.Thereleasenumbershouldbeincrementedonlyatmajortransition pointsinthedevelopment,forinstancewhenanewreleaseofasoftwareproducthasbeencompleted. 3.1.Whenarebranchesneeded? Ayoungrevisiontreeisslender:Itconsistsofonlyonebranch,calledthetrunk.Asthetree ages,sidebranchesmayform.Branchesareneededinthefollowing4situations. Temporaryfixes Supposeatreehas5revisionsgroupedin2releases,asillustratedinFigure2.Revision1.3, thelastoneofrelease1,isinoperationatcustomersites,whilerelease2isinactivedevelopment. 1.1 1.2 1.3 2.1 2.2 Figure2.Aslenderrevisiontree. Nowimagineacustomerrequestingafixofaprobleminrevision1.3,althoughactualdevelopmenthasmovedontorelease2.RCSdoesnotpermitanextrarevisiontobesplicedin between1.3and2.1,sincethatwouldnotreflecttheactualdevelopmenthistory.Instead, createabranchatrevision1.3,andcheckinthefixonthatbranch.Thefirstbranchstartingat1.3hasnumber1.3.1,andtherevisionsonthatbrancharenumbered1.3.1.1,1.3.1.2, etc.Thedoublenumberingisneededtoallowforanotherbranchat1.3,say1.3.2.Revisionsonthesecondbranchwouldbenumbered1.3.2.1,1.3.2.2,andsoon.Thefollowing stepscreatebranch1.3.1andaddrevision1.3.1.1: co−r1.3f.c—checkoutrevision1.3 editf.c—changeit -6-ci−r1.3.1f.c—checkitinonbranch1.3.1 ThissequenceofcommandstransformsthetreeofFigure2intotheoneinFigure3.Note thatitmaybenecessarytoincorporatethedifferencesbetween1.3and1.3.1.1intoarevisionatlevel2.Theoperationrcsmergeautomatesthisprocess(seetheAppendix). 1.1 1.2 1.3 2.1 2.2 1.3.1.1 Figure3.Arevisiontreewithonesidebranch Distributeddevelopmentandcustomermodifications AssumeasituationasinFigure2,whererevision1.3isinoperationatseveralcustomer sites,whilerelease2isindevelopment.CustomersitesshoulduseRCStostorethedistributedsoftware.However,customermodificationsshouldnotbeplacedonthesame branchasthedistributedsource;instead,theyshouldbeplacedonasidebranch.Whenthe nextsoftwaredistributionarrives,itshouldbeappendedtothetrunkofthecustomer’sRCS file,andthecustomercanthenmergethelocalmodificationsbackintothenewrelease.In theaboveexample,acustomer’sRCSfilewouldcontainthefollowingtree,assumingthat thecustomerhasreceivedrevision1.3,addedhislocalmodificationsasrevision1.3.1.1,then receivedrevision2.4,andmerged2.4and1.3.1.1,resultingin2.4.1.1. 1.3 2.4 1.3.1.1 2.4.1.1 Figure4.Acustomer’srevisiontreewithlocalmodifications. ThisapproachisactuallypracticedintheCSNETproject,whereseveraluniversitiesanda companycooperateindevelopinganationalcomputernetwork. Paralleldevelopment Sometimesitisdesirabletoexploreanalternatedesignoradifferentimplementationtechniqueinparallelwiththemainlinedevelopment.Suchdevelopmentshouldbecarriedout onasidebranch.Theexperimentalchangesmaylaterbemovedintothemainline,or abandoned.

-7-Conflictingupdates Acommonoccurrenceisthatoneprogrammerhascheckedoutarevision,butcannotcompletetheassignmentforsomereason.Inthemeantime,anotherpersonmustperform anothermodificationimmediately.Inthatcase,thesecondpersonshouldcheck-outthe samerevision,modifyit,andcheckitinonasidebranch,forlatermerging. Everynodeinarevisiontreeconsistsofthefollowingattributes:arevisionnumber,acheckindateandtime,theauthor’sidentification,alogentry,astateandtheactualtext.Allthese attributesaredeterminedatthetimetherevisionischeckedin.Thestateattributeindicatesthe statusofarevision.Itissetautomaticallyto‘experimental’duringcheck-in.Arevisioncanlater bepromotedtoahigherstatus,forexample‘stable’or‘released’.Thesetofstatesisuserdefined. 3.2.Revisionsarerepresentedasdeltas Forconservingspace,RCSstoresrevisionsintheformofdeltas,i.e.,asdifferencesbetween revisions.Theuserinterfacecompletelyhidesthisfact. Adeltaisasequenceofeditcommandsthattransformsonestringintoanother.Thedeltas employedbyRCSareline-based,whichmeansthattheonlyeditcommandsallowedareinsertion anddeletionoflines.Ifasinglecharacterinalineischanged,theeditscriptsconsidertheentire linechanged.Theprogramdiff2producesasmall,line-baseddeltabetweenpairsoftextfiles.A character-basededitscriptwouldtakemuchlongertocompute,andwouldnotbesignificantly shorter. Usingdeltasisaclassicalspace-timetradeoff:deltasreducethespaceconsumed,but increaseaccesstime.However,aversioncontroltoolshouldimposeaslittledelayaspossibleon programmers.Excessivedelaysdiscouragetheuseofversioncontrols,orinduceprogrammersto takeshortcutsthatcompromisesystemintegrity.Togainreasonablyfastaccesstimeforboth editingandcompiling,RCSarrangesdeltasinthefollowingway.Themostrecentrevisiononthe trunkisstoredintact.Allotherrevisionsonthetrunkarestoredasreversedeltas.Areverse deltadescribeshowtogobackwardinthedevelopmenthistory:itproducesthedesiredrevisionif appliedtothesuccessorofthatrevision.Thisimplementationhastheadvantagethatextraction ofthelatestrevisionisasimpleandfastcopyoperation.Addinganewrevisiontothetrunkis alsofast:cisimplyaddsthenewrevisionintact,replacesthepreviousrevisionwithareverse delta,andkeepstherestoftheolddeltas.Thus,cirequiresthecomputationofonlyonenew delta. Branchesneedspecialtreatment.Thenaivesolutionwouldbetostorecompletecopiesfor thetipsofallbranches.Clearly,thisapproachwouldcosttoomuchspace.Instead,RCSuses forwarddeltasforbranches.Regeneratingarevisiononasidebranchproceedsasfollows.First, -8-extractthelatestrevisiononthetrunk;secondly,applyreversedeltasuntiltheforkrevisionfor thebranchisobtained;thirdly,applyforwarddeltasuntilthedesiredbranchrevisionisreached. Figure5illustratesatreewithonesidebranch.Trianglespointingtotheleftandrightrepresent reverseandforwarddeltas,respectively. 1.1 1.2 1.3 2.1 2.2 1.3.1.1 1.3.1.2 Figure5.Arevisiontreewithreverseandforwarddeltas. Althoughimplementingfastcheck-outforthelatesttrunkrevision,thisarrangementhasthe disadvantagethatgenerationofotherrevisionstakestimeproportionaltothenumberofdeltas applied.Forexample,regeneratingthebranchtipinFigure5requiresapplicationoffivedeltas (includingtheinitialone).Sinceusagestatisticsshowthatthelatesttrunkrevisionistheone thatisretrievedin95percentofallcases(seethesectiononusagestatistics),biasingcheck-out timeinfavorofthatrevisionresultsinsignificantsavings.However,carefulimplementationofthe deltaapplicationprocessisnecessarytoprovidelowretrievaloverheadforotherrevisions,inparticularforbranchtips. Thereareseveraltechniquesfordeltaapplication.Thenaiveoneistopasseachdeltatoa general-purposetexteditor.AprototypeofRCSinvokedtheUNIXeditoredbothforapplying deltasandforexpandingtheidentificationmarkers.Althougheasytoimplement,performance waspoor,owingtothehighstart-upcostsandexcessgeneralityofed.Anintermediateversionof RCSusedaspecial-purpose,stream-orientededitor.Thistechniquereducedthecostofapplying adeltatothecostofcheckingoutthelatesttrunkrevision.Thereasonforthisbehavioristhat eachdeltaapplicationinvolvesacompletepassovertheprecedingrevision. However,thereisamuchbetteralgorithm.Notethatthedeltasarelineorientedandthat mostoftheworkofastreameditorinvolvescopyingunchangedlinesfromonerevisiontothe next.Afasteralgorithmavoidsunnecessarycopyingofcharacterstringsbyusingapiecetable.A piecetableisaone-dimensionalarray,specifyinghowagivenrevisionis‘piecedtogether’from linesintheRCSfile.SupposepiecetablePTrrepresentsrevisionr.ThenPTr[i]containsthe startingpositionoflineiofrevisionr.ApplicationofthenextdeltatransformspiecetablePTr intoPTr+1.Forinstance,adeletecommandremovesaseriesofentriesfromthepiecetable.An insertioncommandinsertsnewentries,movingtheentriesfollowingtheinsertionpointfurther -9-downthearray.Theinsertedentriespointtothetextlinesinthedelta.Thus,noI/Oisinvolved exceptforreadingthedeltaitself.Whenalldeltashavebeenappliedtothepiecetable,asequentialpassthroughthetablelooksupeachlineintheRCSfileandcopiesittotheoutputfile, updatingidentificationmarkersatthesametime.Ofcourse,theRCSfilemustpermitrandom access,sincethecopiedlinesarescatteredthroughoutthatfile.Figure6illustratesanRCSfile withtworevisionsandthecorrespondingpiecetables. Figure6isnotavailable. Figure6.AnRCSfileanditspiecetables Thepiecetableapproachhasthepropertythatthetimeforapplyingasingledeltais roughlydeterminedbythesizeofthedelta,andnotbythesizeoftherevision.Forexample,ifa deltais10percentofthesizeofarevision,thenapplyingittakesonly10percentofthetimeto generatethelatesttrunkrevision.(Thestreameditorwouldtake100percent.) Thereisanimportantalternativeforrepresentingdeltasthataffectsperformance.SCCS3,a precursorofRCS,usesinterleaveddeltas.Afilecontaininginterleaveddeltasispartitionedinto blocksoflines.Eachblockhasaheaderthatspecifiestowhichrevision(s)theblockbelongs.The blocksaresortedoutinsuchawaythatasinglepassoverthefilecanpickupallthelinesbelongingtoagivenrevision.Thus,theregenerationtimeforallrevisionsisthesame:allheadersmust beinspected,andtheassociatedblockseithercopiedorskipped.Asthenumberofrevisions increases,thecostofretrievinganyrevisionismuchhigherthanthecostofcheckingoutthelatesttrunkrevisionwithreversedeltas.AdetailedcomparisonofSCCS’sinterleaveddeltasand RCS’sreversedeltascanbefoundinReference4.ThisreferenceconsiderstheversionofRCS withthestreameditoronly.Thepiecetablemethodimprovesperformancefurther,sothatRCS isalwaysfasterthanSCCS,exceptif10ormoredeltasareapplied. Additionalspeed-upforbothdeltamethodscanbeobtainedbycachingthemostrecently generatedrevision,ashasbeenimplementedinDSEE.5Withcaching,accesstimetofrequently -10-usedrevisionscanapproachnormalfileaccesstime,atthecostofsomeadditionalspace. 4.Locking:AControversialIssue ThelockingmechanismforRCSwasdifficulttodesign.Theproblemanditssolutionare firstpresentedintheir‘pure’form,followedbyadiscussionofthecomplicationscausedby‘realworld’considerations. RCSmustpreventtwoormorepersonsfromdepositingcompetingchangesofthesamerevision.Supposetwoprogrammerscheckoutrevision2.4andmodifyit.ProgrammerAchecksina revisionbeforeprogrammerB.Unfortunately,programmerBhasnotseenA’schanges,sothe effectisthatA’schangesarecoveredupbyB’sdeposit.A’schangesarenotlostsinceallrevisionsaresaved,buttheyareconfinedtoasinglerevision.‡ ThisconflictispreventedinRCSbylocking.Wheneversomeoneintendstoeditarevision (asopposedtoreadingorcompilingit),therevisionshouldbecheckedoutandlocked,usingthe −loptiononco.Onsubsequentcheck-in,citeststhelockandthenremovesit.Atmostonepro-grammeratatimemaylockaparticularrevision,andonlythisprogrammermaycheckinthe succeedingrevision.Thus,whilearevisionislocked,itistheexclusiveresponsibilityofthelocker. AnimportantmaximforsoftwaretoolslikeRCSisthattheymustnotstandinthewayof makingprogresswithaproject.Thisconsiderationleadstoseveralweakeningsofthelocking mechanism.Firstofall,evenifarevisionislocked,itcanstillbecheckedout.Thisisnecessary ifotherpeoplewishtocompileorinspectthelockedrevisionwhilethenextoneisinpreparation. Theonlyoperationstheycannotdoaretolocktherevisionortocheckinthesucceedingone. Secondly,check-inoperationsonotherbranchesintheRCSfilearestillpossible;thelockingof onerevisiondoesnotaffectanyotherrevision.Thirdly,revisionsareoccasionallylockedfora longperiodoftimebecauseaprogrammerisabsentorotherwiseunabletocompletetheassignment.Ifanotherprogrammerhastomakeapressingchange,therearethefollowingthreealternativesformakingprogress:a)findoutwhoisholdingthelockandaskthatpersontoreleaseit; b)checkoutthelockedrevision,modifyit,checkitinonabranch,andmergethechangeslater; c)breakthelock.Breakingalockleavesahighlyvisibletrace,namelyanelectronicmailmessage thatissentautomaticallytotheholderofthelock,recordingthebreakerandacommentary requestedfromhim.Thus,breakinglocksistoleratedundercertaincircumstances,butwillnot gounnoticed.Experiencehasshownthattheautomaticmailmessageattachesahighenough stigmatolockbreaking,suchthatprogrammersbreaklocksonlyinrealemergencies,orwhena co-workerresignsandleaveslockedrevisionsbehind. ‡Notethatthisproblemisentirelydifferentfromtheatomicityproblem.Atomicitymeansthat concurrentupdateoperationsonthesameRCSfilecannotbepermitted,becausethatmayresultin inconsistentdata.Atomicupdatesareessential(andimplementedinRCS),butdonotsolvetheconflictdiscussedhere.

-11-IfanRCSfileisprivate,i.e.,whenaprogrammerownsanRCSfileanddoesnotexpectany-oneelsetoperformcheck-inoperations,lockingisanunnecessarynuisance.Inthiscase,the ‘strictlockingfeature’discussedearliermaybedisabled,providedthatfileprotectionissetsuch thatonlytheownermaywritetheRCSfile.Thishastheeffectthatonlytheownercancheck-in revisions,andthatnolockisneededfordoingso. Asaddedprotection,eachRCSfilecontainsanaccesslistthatspecifiestheuserswhomay executeupdateoperations.Ifanaccesslistisempty,onlynormalUNIXfileprotectionapplies. Thus,theaccesslistisusefulforrestrictingthesetofpeoplewhowouldotherwisehaveupdate permission.Justaswithlocking,theaccesslisthasnoeffectonread-onlyoperationssuchasco. ThisapproachisconsistentwiththeUNIXphilosophyofopenness,whichcontributestoaproductivesoftwaredevelopmentenvironment. 5.ConfigurationManagement TheprecedingsectionsdescribedhowRCSdealswithrevisionsofindividualcomponents; thissectiondiscusseshowtohandleconfigurations.Aconfigurationisasetofrevisions,where eachrevisioncomesfromadifferentrevisiongroup,andtherevisionsareselectedaccordingtoa certaincriterion.Forexample,inordertobuildafunctioningcompiler,the‘right’revisionsfrom thescanner,theparser,theoptimizerandthecodegeneratormustbecombined.RCS,inconjunctionwithMAKE,providesanumberoffacilitiestoeffectasmoothselection. 5.1.RCSSelectionFunctions Defaultselection Duringdevelopment,theusualselectioncriterionistochoosethelatestrevisionofallcomponents.Thecocommandmakesthisselectionbydefault.Forexample,thecommand co*,v retrievesthelatestrevisiononthedefaultbranchofeachRCSfileinthecurrentdirectory. Thedefaultbranchisusuallythetrunk,butmaybesettobeasidebranch.Sidebranches asdefaultsareneededindistributedsoftwaredevelopment,asdiscussedinthesectionon theRCSrevisiontree. Releasebasedselection Specifyingareleaseorbranchnumberselectsthelatestrevisioninthatreleaseorbranch. Forinstance, co−r2*,v retrievesthelatestrevisionwithreleasenumber2fromeachRCSfile.Thisselectionis -12-convenientifareleasehasbeencompletedanddevelopmenthasmovedontothenext release. Stateandauthorbasedselection Ifthehighestlevelnumberwithinagivenreleasenumberisnotthedesiredone,thestate attributecanhelp.Forexample, co−r2−sReleased*,v retrievesthelatestrevisionwithreleasenumber2whosestateattributeis‘Released’.Of course,thestateattributehastobesetappropriately,usingtheciorrcscommands. Anotheralternativeistoselectarevisionbyitsauthor,usingthe−woption. Datebasedselection Revisionsmayalsobeselectedbydate.SupposeareleaseofanentiresystemwascompletedandcurrentonMarch4,at1:00p.m.localtime.Thenthecommand co−d’March4,1:00pmLT’*,v checksoutallthecomponentsofthatrelease,independentofthenumbering.The−d optionspecifiesa‘cutoffdate’,i.e.,therevisionselectedhasacheck-indatethatisclosest to,butnotafterthedategiven. Namebasedselection Themostpowerfulselectionfunctionisbasedonassigningsymbolicnamestorevisionsand branches.Inlargesystems,asinglereleasenumberordateisnotsufficienttocollectthe appropriaterevisionsfromallgroups.Forexample,supposeonewishestocombinerelease2 ofonesubsystemandrelease15ofanother.Mostlikely,thecreationdatesofthosereleases differalso.Thus,asinglerevisionnumberordatepassedtothecocommandwillnotsuffice toselecttherightrevisions.Symbolicrevisionnumberssolvethisproblem.EachRCSfile maycontainasetofsymbolicnamesthataremappedtonumericrevisionnumbers.For example,assumethesymbolV3isboundtoreleasenumber2infiles,v,andtorevision number15.9int,v.Thenthesinglecommand co−rV3s,vt,v retrievesthelatestrevisionofrelease2froms,v,andrevision15.9fromt,v.Inalargesystemwithmanymodules,checkingoutallrevisionswithonecommandgreatlysimplifiesconfigurationmanagement. Judicioususeofsymbolicrevisionnumbershelpswithorganizinglargeconfigurations.A specialcommand,rcsfreeze,assignsasymbolicrevisionnumbertoaselectedrevisionineveryRCS file.Rcsfreezeeffectivelyfreezesaconfiguration.Theassignedsymbolicrevisionnumberselects -13-allcomponentsoftheconfiguration.Ifnecessary,symbolicnumbersmayevenbeintermixedwith numericones.Thus,V3.5intheaboveexamplewouldselectrevision2.5ins,vandbranch15.9.5 int,v. Theoptions−r,−s,−wand−dmaybecombined.Ifabranchisgiven,thelatestrevision onthatbranchsatisfyingallconditionsisretrieved;otherwise,thedefaultbranchisused. 5.2.CombiningMAKEandRCS MAKE1isaprogramthatprocessesconfigurations.Itisdrivenbyconfigurationspecificationsrecordedinaspecialfile,calleda‘Makefile’.MAKEavoidsredundantprocessingstepsby comparingcreationdatesofsourceandprocessedobjects.Forexample,wheninstructedtocompileallmodulesofagivensystem,itonlyrecompilesthosesourcemodulesthatwerechanged sincetheywereprocessedlast. MAKEhasbeenextendedwithanauto-checkoutfeatureforRCS.*Whenacertainfileto beprocessedisnotpresent,MAKEattemptsacheck-outoperation.Ifsuccessful,MAKEper-formstherequiredprocessing,andthendeletesthecheckedoutfiletoconservespace.Theselec-tionparametersdiscussedabovecanbepassedtoMAKEeitherasparameters,ordirectlyembed-dedintheMakefile.MAKEhasalsobeenextendedtosearchthesubdirectorynamedRCSfor neededfiles,ratherthanjustthecurrentworkingdirectory.However,ifaworkingfileispresent, MAKEtotallyignoresthecorrespondingRCSfileandusestheworkingfile.(Innewerversionsof MAKEdistributedbyAT&Tandothers,auto-checkoutcanbeachievedwiththeruleDEFAULT, insteadofaspecialextensionofMAKE.However,afilecheckedoutbytheruleDEFAULTwill notbedeletedafterprocessing.Rcscleancanbeusedforthatpurpose.) Withauto-checkout,RCS/MAKEcaneffectaselectionruleespeciallytunedformulti-per-sonsoftwaredevelopmentandmaintenance.Inthesesituations,programmersshouldobtaincon-figurationsthatconsistoftherevisionstheyhavepersonallycheckedoutplusthelatestcheckedin revisionofallotherrevisiongroups.Thisschemacanbesetupasfollows. Eachprogrammerchoosesaworkingdirectoryandplacesintoitasymboliclink,named RCS,tothedirectorycontainingtherelevantRCSfiles.Thesymboliclinkmakessurethatco andcioperationsneedonlyspecifytheworkingfiles,andthattheMakefileneednotbechanged. Theprogrammerthenchecksouttheneededfilesandmodifiesthem.IfMAKEisinvoked,it composesconfigurationsbyselectingthoserevisionsthatarecheckedout,andtherestfromthe subdirectoryRCS.Thelatterselectionmaybecontrolledbyasymbolicrevisionnumberoranyof theotherselectioncriteria.Ifthereareseveralprogrammerseditinginseparateworkingdirectories,theyareinsulatedfromeachother’schangesuntilcheckingintheirmodifications. *Thisauto-checkoutextensionisavailableonlyinsomeversionsofMAKE,e.g.GNUMAKE.

-14-Similarly,amaintainercanrecreateanolderconfigurationbystartingtoworkinanempty workingdirectory.DuringtheinitialMAKEinvocation,allrevisionsareselectedfromRCSfiles. Asthemaintainerchecksoutfilesandmodifiesthem,anewconfigurationisgraduallybuiltup. EverytimeMAKEisinvoked,itsubstitutesthemodifiedrevisionsintotheconfigurationbeing manipulated. AfinalapplicationofRCSistouseitforstoringMakefiles.RevisiongroupsofMakefiles representmultipleversionsofconfigurations.Wheneveraconfigurationisbaselinedordistributed,thebestapproachistounambiguouslyfixtheconfigurationwithasymbolicrevision numberbycallingrcsfreeze,toembedthatsymbolintotheMakefile,andtocheckintheMakefile (usingthesamesymbolicrevisionnumber).Withthisapproach,oldconfigurationscanberegeneratedeasilyandreliably. 6.UsageStatistics ThefollowingusagestatisticswerecollectedontwoDECVAX-11/780computersofthe PurdueComputerScienceDepartment.Bothmachinesaremainlyusedforresearchpurposes. Thus,thedatareflectanenvironmentinwhichthemajorityofprojectsinvolveprototypingand advancedsoftwaredevelopment,butrelativelylittlelong-termmaintenance. Forthefirstexperiment,theciandcooperationswereinstrumentedtologthenumberof backwardandforwarddeltasapplied.Thedatawerecollectedduringa13monthperiodfrom Dec.1982toDec.1983.TableIsummarizestheresults. OperationTotalTotaldeltasMeandeltasOperationsBranch operationsappliedappliedwith>1deltaoperations co786793201.18509(6%)203(3%) ci346822070.6485(2%)75(2%) ci&co11335115271.02594(5%)278(2%) TableI.Statisticsforcoandcioperations. Thefirsttwolinesshowstatisticsforcheck-outandcheck-in;thethirdlineshowsthecombi-nation.Recallthatciperformsanimplicitcheck-outtoobtainarevisionforcomputingthedelta. Inallmeasurespresented,themostrecentrevision(storedintact)countsasonedelta.The numberofdeltasappliedrepresentsthenumberofpassesnecessary,wherethefirst‘pass’isa copyingstep. Notethatthecheck-outoperationisexecutedmorethantwiceasfrequentlyasthecheck-in operation.Thefourthcolumngivesthemeannumberofdeltasappliedinallthreecases.Forci, themeannumberofdeltasappliedislessthanone.Thereasonsarethattheinitialcheck-in requiresnodeltaatall,andthattheonlytimecirequiresmorethanonedeltaisforbranches. Column5showstheactualnumberofoperationsthatappliedmorethanonedelta.Thelastcolumnindicatesthatbrancheswerenotusedoften.

-15-Thelastthreecolumnsdemonstratethatthemostrecenttrunkrevisionisbyfarthemost frequentlyaccessed.ForRCS,check-outofthisrevisionisasimplecopyoperation,whichisthe absoluteminimumgiventhecopy-semanticsofco.Accesstoolderrevisionsandbranchesismore commoninnon-academicenvironments,yetevenifaccesstoolderdeltaswereanorderofmagni-tudemorefrequent,thecombinedaveragenumberofdeltasappliedwouldstillbebelow1.2. SinceRCSisfasterthanSCCSuntilupto10deltaapplications,reversedeltasareclearlythe methodofchoice. Thesecondexperiment,conductedinMarchof1984,involvedsurveyingtheexistingRCS filesonourtwomachines.ThegoalwastodeterminethemeannumberofrevisionsperRCSfile, aswellasthespaceconsumedbythem.TableIIshowstheresults.(TablesIandIIwereproducedatdifferenttimesandareunrelated.) TotalRCSTotalMeanMeansizeofMeansizeofOverhead filesrevisionsrevisionsRCSfilesrevisions Allfiles8033111331.39615655851.10 Fileswith147745783.10807460411.34 ≥2deltas TableII.StatisticsforRCSfiles. ThemeannumberofrevisionsperRCSfileis1.39.Columns5and6showthemeansizes (inbytes)ofanRCSfileandofthelatestrevisionofeachRCSfile,respectively.The‘overhead’ columncontainstheratioofthemeansizes.AssumingthatallrevisionsinanRCSfileare approximatelythesamesize,thisratiogivesameasureofthespaceconsumedbytheextrarevisions. Inoursample,over80percentoftheRCSfilescontainedonlyasinglerevision.Thereason isthatoursystemsprogrammersroutinelycheckinallsourcefilesonthedistributiontapes,even thoughtheymaynevertouchthemagain.Togetabetterindicationofhowmuchspacesavings arepossiblewithdeltas,allmeasureswiththosefilesthatcontained2ormorerevisionswere recomputed.OnlyforthosefilesisRCSnecessary.Asshowninthesecondline,theaverage numberofrevisionsforthosefilesis3.10,withanoverheadof1.34.Thismeansthattheextra 2.10deltasrequire34percentextraspace,or16percentperextrarevision.Rochkind3measured thespaceconsumedbySCCS,andreportedanaverageof5revisionspergroupandanoverhead of1.37(orabout9percentperextrarevision).Inalaterpaper,Glasser6observedanaverageof 7revisionspergroupinasingle,largeproject,butprovidednooverheadfigure.Inhispaperon DSEE5,Leblangreportedthatdeltastoragecombinedwithblankcompressionresultsinanoverheadofamere1−2percentperrevision.Sinceleadingblanksaccountedforabout20percentof thesurveyedPascalprograms,arevisiongroupwith5−10memberswassmallerthanasingle cleartextcopy.

-16-Theaboveobservationsdemonstrateclearlythatthespaceneededforextrarevisionsis small.Withdeltastorage,theluxuryofkeepingmultiplerevisionsonlineiscertainlyaffordable. Infact,introducingasystemwithdeltastoragemayreducestoragerequirements,becauseprogrammersoftensaveback-upcopiesanyway.Sinceback-upcopiesarestoredmuchmoreeffi-cientlywithdeltas,introducingasystemsuchasRCSmayactuallyfreeaconsiderableamountof space. 7.SurveyofVersionControlTools Theneedtokeepback-upcopiesofsoftwarearosewhenprogramsanddatawerenolonger storedonpapermedia,butwereenteredfromterminalsandstoredondisk.Back-upcopiesare desirableforreliability,andmanymoderneditorsautomaticallysaveaback-upcopyforeveryfile touched.Thisstrategyisvaluableforshort-termback-ups,butnotsuitableforlong-termversion control,sinceanexistingback-upcopyisoverwrittenwheneverthecorrespondingfileisedited. Tapearchivesaresuitableforlong-term,offlinestorage.Ifallchangedfilesaredumpedona back-uptapeonceperday,oldrevisionsremainaccessible.However,tapearchivesareunsatisfac-toryforversioncontrolinseveralways.First,backingupthefilesystemevery24hoursdoesnot captureintermediaterevisions.Secondly,theoldrevisionsarenotonline,andaccessingthemis tediousandtime-consuming.Inparticular,itisimpracticaltocompareseveraloldrevisionsofa group,becausethatmayrequiremountingandsearchingseveraltapes.Tapearchivesareimportantfail-safetoolsintheeventofcatastrophicdiskfailuresoraccidentaldeletions,buttheyare ill-suitedforversioncontrol.Conversely,versioncontroltoolsdonotobviatetheneedfortape archives. Anaturaltechniqueforkeepingseveraloldrevisionsonlineistoneverdeleteafile.Editing afilesimplycreatesanewfilewiththesamename,butwithadifferentsequencenumber.This technique,availableasanoptioninDEC’sVMSoperatingsystem,turnsouttobeinadequatefor versioncontrol.First,itisprohibitivelyexpensiveintermsofstoragecosts,especiallysinceno datacompressiontechniquesareemployed.Secondly,indiscriminatelystoringeverychangeproducestoomanyrevisions,andprogrammershavedifficultiesdistinguishingthem.Theproliferationofrevisionsforcesprogrammerstospendmuchtimeonfindinganddeletinguselessfiles. Thirdly,mostofthesupportfunctionslikelocking,logging,revisionselection,andidentification describedinthispaperarenotavailable. Analternativeapproachistoseparateeditingfromrevisioncontrol.Theusermayrepeatedlyeditagivenrevision,untilfreezingitwithanexplicitcommand.Oncearevisionisfrozen,it isstoredpermanentlyandcannolongerbemodified.(InRCS,freezingarevisionsisdonewith ci.)Editingafrozenrevisionimplicitlycreatesanewone,whichcanagainbechangedrepeatedly untilitisfrozenitself.Thisapproachsavesexactlythoserevisionsthattheuserconsiders -17-important,andkeepsthenumberofrevisionsmanageable.IBM’sCLEAR/CASTER7,AT&T’s SCCS3,CMU’sSDC8andDEC’sCMS9,areexamplesofversioncontrolsystemsusingthis approach.CLEAR/CASTERmaintainsadatabaseofprograms,specifications,documentation andmessages,usingdeltas.Itsgoalistoprovidecontroloverthedevelopmentprocessfroma managementviewpoint.SCCSstoresmultiplerevisionsofsourcetextinanancestraltree,records alogentryforeachrevision,providesaccesscontrol,andhasfacilitiesforuniquelyidentifying eachrevision.Anefficientdeltatechniquereducesthespaceconsumedbyeachrevisiongroup. SDCismuchsimplerthanSCCSbecauseitstoresnotmorethantworevisions.However,itmaintainsacompletelogforalloldrevisions,someofwhichmaybeonback-uptape.CMS,like SCCS,managestree-structuredrevisiongroups,butoffersnoidentificationmechanism. Toolsfordealingwithconfigurationsarestillinastateofflux.SCCS,SDCandCMScan becombinedwithMAKEorMAKE-likeprograms.Sinceflexibleselectionrulesaremissingfrom allthesetools,itissometimesdifficulttospecifypreciselywhichrevisionofeachgroupshouldbe passedtoMAKEforbuildingadesiredconfiguration.TheXeroxCedarsystem10providesa‘SystemModeller’thatcanrebuildaconfigurationfromanarbitrarysetofmodulerevisions.The revisionsofamoduleareonlydistinguishedbycreationtime,andthereisnotoolformanaging groups.Sincetheselectionrulesareprimitive,theSystemModellerappearstobesomewhat tedioustouse.Apollo’sDSEE5isasophisticatedsoftwareengineeringenvironment.Itmanages revisiongroupsinawaysimilartoSCCSandCMS.Configurationsarebuiltusing‘configuration threads’.Aconfigurationthreadstateswhichrevisionofeachgroupnamedinaconfiguration shouldbechosen.Aconfigurationthreadmaycontaindynamicspecifiers(e.g.,‘choosetherevisionsIamcurrentlyworkingon,andthemostrecentrevisionsotherwise’),whichareboundautomaticallyatbuildtime.Italsoprovidesanotificationmechanismforalertingmaintainersabout theneedtorebuildasystemafterachange. RCSisbasedonageneralmodelfordescribingmulti-version/multi-configurationsystems11. ThemodeldescribessystemsusingAND/ORgraphs,whereANDnodesrepresentconfigurations, andORnodesrepresentversiongroups.Themodelgivesrisetoasuitofselectionrulesforcomposingconfigurations,almostallofwhichareimplementedinRCS.Therevisionsselectedby RCSarepassedtoMAKEforconfigurationbuilding.Revisiongroupmanagementismodelled afterSCCS.RCSretainsSCCS’sbestfeatures,butoffersasignificantlysimpleruserinterface, flexibleselectionrules,adequateintegrationwithMAKEandimprovedidentification.Adetailed comparisonofRCSandSCCSappearsinReference4. Animportantcomponentofallrevisioncontrolsystemsisaprogramforcomputingdeltas. SCCSandRCSusetheprogramdiff2,whichfirstcomputesthelongestcommonsubstringoftwo revisions,andthenproducesthedeltafromthatsubstring.Thedeltaissimplyaneditscriptconsistingofdeletionandinsertioncommandsthatgenerateonerevisionfromtheother.

-18-Adeltabasedonalongestcommonsubstringisnotnecessarilyminimal,becauseitdoesnot takeadvantageofcrossingblockmoves.Crossingblockmovesariseiftwoormoreblocksoflines (e.g.,procedures)appearinadifferentorderintworevisions.Aneditscriptderivedfroma longestcommonsubstringfirstdeletestheshorterofthetwoblocks,andthenreinsertsit. Heckel12proposedanalgorithmfordetectingblockmoves,butsincethealgorithmisbasedon heuristics,thereareconditionsunderwhichthegenerateddeltaisfarfromminimal.DSEEuses thisalgorithmcombinedwithblankcompression,apparentlywithsatisfactoryoverallresults.A newalgorithmthatisguaranteedtoproduceaminimaldeltabasedonblockmovesappearsin Reference13.AfuturereleaseofRCSwillusethisalgorithm. Acknowledgements:ManypeoplehavehelpedmakeRCSasuccessbycontributedcriticisms, suggestions,corrections,andevenwholenewcommands(includingmanualpages).Thelistof peopleistoolongtobereproducedhere,butmysincerethanksfortheirhelpandgoodwillgoes toallofthem. Appendix:SynopsisofRCSOperations ci−checkinrevisions CistoresthecontentsofaworkingfileintothecorrespondingRCSfileasanewrevision.If theRCSfiledoesn’texist,cicreatesit.Ciremovestheworkingfile,unlessoneofthe options−uor−lispresent.Foreachcheck-in,ciasksforacommentarydescribingthe changesrelativetothepreviousrevision. Ciassignstherevisionnumbergivenbythe−roption;ifthatoptionismissing,itderives thenumberfromthelockheldbytheuser;ifthereisnolockandlockingisnotstrict,ci incrementsthenumberofthelatestrevisiononthetrunk.Asidebranchcanonlybe startedbyexplicitlyspecifyingitsnumberwiththe−roptionduringcheck-in. Cialsodetermineswhethertherevisiontobecheckedinisdifferentfromthepreviousone, andaskswhethertoproceedifnot.Thisfacilitysimplifiescheck-inoperationsforlargesys-tems,becauseoneneednotrememberwhichfileswerechanged. Theoption−ksearchesthecheckedinfileforidentificationmarkerscontainingthe attributesrevisionnumber,check-indate,authorandstate,andassignsthesetothenew revisionratherthancomputingthem.Thisoptionisusefulforsoftwaredistribution:RecipientsofdistributedsoftwareusingRCSshouldcheckinupdateswiththe−koption.This conventionguaranteesthatrevisionnumbers,check-indates,etc.,arethesameatallsites. co−checkoutrevisions Coretrievesrevisionsaccordingtorevisionnumber,date,authorandstateattributes.It eitherplacestherevisionintotheworkingfile,orprintsitonthestandardoutput.Co alwaysexpandstheidentificationmarkers. ident−extractidentificationmarkers Identextractstheidentificationmarkersexpandedbycofromanyfileandprintsthem. rcs−changeRCSfileattributes Rcsisanadministrativeoperationthatchangesaccesslists,locks,unlocks,breakslocks,togglesthestrict-lockingfeature,setsstateattributesandsymbolicrevisionnumbers,changes thedescription,anddeletesrevisions.Arevisioncanonlybedeletedifitisnottheforkofa -19-sidebranch. rcsclean−cleanworkingdirectory Rcscleanremovesworkingfilesthatwerecheckedoutbutneverchanged.* rcsdiff−comparerevisions Rcsdiffcomparestworevisionsandprintstheirdifference,usingtheUNIXtooldiff.Oneof therevisionscomparedmaybecheckedout.Thiscommandisusefulforfindingoutabout changes. rcsfreeze−freezeaconfiguration RcsfreezeassignsthesamesymbolicrevisionnumbertoagivenrevisioninallRCSfiles. Thiscommandisusefulforaccuratelyrecordingaconfiguration.* rcsmerge−mergerevisions Rcsmergemergestworevisions,rev1andrev2,withrespecttoacommonancestor.A3-way filecomparisondeterminesthesegmentsoflinesthatare(a)thesameinallthreerevisions, or(b)thesamein2revisions,or(c)differentinallthree.Forallsegmentsoftype(b) whererev1isthedifferingrevision,thesegmentinrev1replacesthecorrespondingsegment ofrev2.Type(c)indicatesanoverlappingchange,isflaggedasanerror,andrequiresuser interventiontoselectthecorrectalternative. rlog−readlogmessages RlogprintsthelogmessagesandotherinformationinanRCSfile. *Thercscleanandrcsfreezecommandsareoptionalandarenotalwaysinstalled.

-20-References 1.Feldman,StuartI.,“Make—AProgramforMaintainingComputerPrograms,”Software— Practice&Experience,9,3,pp.255-265(March1979). 2.Hunt,JamesW.andMcIlroy,M.D.,“AnAlgorithmforDifferentialFileComparison,”41, ComputingScienceTechnicalReport,BellLaboratories(June1976). 3.Rochkind,MarcJ.,“TheSourceCodeControlSystem,”IEEETransactionsonSoftware Engineering,SE-1,4,pp.364-370(Dec.1975). 4.Tichy,WalterF.,“Design,Implementation,andEvaluationofaRevisionControlSystem” inProceedingsofthe6thInternationalConferenceonSoftwareEngineering,pp.58-67, ACM,IEEE,IPS,NBS(September1982). 5.Leblang,DavidB.andChase,RobertP.,“Computer-AidedSoftwareEngineeringinaDis-tributedWorkstationEnvironment,”SIGPLANNotices,19,5,pp.104-112(May1984).Pro-ceedingsoftheACMSIGSOFT/SIGPLANSoftwareEngineeringSymposiumonPractical SoftwareDevelopmentEnvironments.. 6.Glasser,AlanL.,“TheEvolutionofaSourceCodeControlSystem,”SoftwareEngineering Notes,3,5,pp.122-125(Nov.1978).ProceedingsoftheSoftwareQualityandAssurance Workshop. 7.Brown,H.B.,“TheClear/CasterSystem,”NatoConferenceonSoftwareEngineering,Rome (1970). 8.Habermann,A.Nico,ASoftwareDevelopmentControlSystem,TechnicalReport,Carnegie-MellonUniversity,DepartmentofComputerScience(Jan.1979). 9.DEC,CodeManagementSystem,DigitalEquipmentCorporation(1982).Document No.EA-23134-82. 10.Lampson,ButlerW.andSchmidt,EricE.,“PracticalUseofaPolymorphicApplicative Language”inProceedingsofthe10thSymposiumonPrinciplesofProgrammingLanguages, pp.237-255,ACM(January1983). 11.Tichy,WalterF.,“ADataModelforProgrammingSupportEnvironmentsanditsApplication”inAutomatedToolsforInformationSystemDesignandDevelopment,ed.Hans-Jochen SchneiderandAnthonyI.Wasserman,North-HollandPublishingCompany,Amsterdam (1982). 12.Heckel,Paul,“ATechniqueforIsolatingDifferencesBetweenFiles,”Communicationsofthe ACM,21,4,pp.264-268(April1978). 13.Tichy,WalterF.,“TheString-to-StringCorrectionProblemwithBlockMoves,”ACM TransactionsonComputerSystems,2,4,pp.309-321(Nov.1984).