########## CVS - kommandolinjeverktøyet ########## -==- CVS kan benyttes på NTNUs login-servere, linuxlogin.stud.ntnu.no. Det første som må gjøres når man vil benytte CVS er å lage en såkalt *CVS-rot*. Det er under denne at alt vil bli lagret. La oss si man ønsker å opprette en CVS-rot på en katalog ved navn "cvs" på sitt hjemmeområde. Man begynner med å opprette katalogen: tiger:~$ mkdir cvs Man kan så opprette CVS-roten i denne katalogen med kommandoen tiger:~$ cvs -d ~grip/cvs init Argumentet "-d ~grip/cvs" indikerer hvor CVS-roten er (bytt ut "grip" med ditt eget brukernavn). For å slippe å skrive dette i alle kommandoene før man har opprettet prosjektet, kan man skrive tiger:~$ export CVSROOT=~grip/cvs Dette vil opprette en miljøvariabel, "CVSROOT", som inneholder banen til CVS-roten. -==- Alt er klart til å begynne å opprette prosjekter for å lagre i CVS. La oss si at det finnes en katalog "java", med et programmeringsprosjekt i, som man vil benytte CVS for. Man kan da gå inn i katalogen og opprette CVS-prosjektet med alle filene og underkatalogene til "java"-katalogen: tiger:~$ cd java tiger:~/java$ cvs import -m "Et java-prosjekt" javaprosjekt eksempel start N javaprosjekt/en_fil.java N javaprosjekt/testfil.java No conflicts created by this import Man bør få en utskrift som ligner på den ovenfor, som indikerer at filene som er listet opp er lagt til i det såkalte CVS-repository'et for prosjektet, som er en plass under CVS-roten der all dataen lagres. Navnet på repository'et i eksemplet ovenfor er "javaprosjekt". Dersom man ønsker det kan man nå slette hele "java"-katalogen. Alt er nemlig lagret i CVS-repository'et. -==- Dette er vel og bra, men det er ønskelig å arbeide med filene, og dessuten kunne opprette nye/slette gamle filer. Det man nå kan gjøre er å gå til en katalog der man ønsker å plassere filene, og skrive tiger:~$ cvs checkout javaprosjekt cvs checkout: Updating javaprosjekt U javaprosjekt/en_fil.java U javaprosjekt/testfil.java Det vil nå bli opprettet en kopi av javaprosjektet i katalogen "javaprosjekt". Dette er en lokal kopi som man kan herje med akkurat som man vil. Man kan forandre filene, slette filer, opprette nye filer etc. Det fine er at dette ikke endrer det som ligger i CVS-repository'et i det hele tatt. Når man føler at man har gjort noe nyttig, for eksempel at man har forandret filen "testfil.java", kan man *oppdatere repository'et* med forandringene, ved å skrive tiger:~/javaprosjekt$ cvs commit -m "Laget en ny utskriftsmetode" testfil.java Checking in testfil.java; /home/homej/gr/grip/cvs/javaprosjekt/testfil.java,v -- testfil.java new revision: 1.2; previous revision: 1.1 done Filen blir nå lagt til i repository'et sammen med kommentaren i hermetegn, men får et nytt versjonsnummer. Dermed blir ikke den gamle versjonen overskrevet, men kan hentes ut igjen i tilfelle man forandret noe feil. For å *sammenligne en lokal fil med den i repository'et* kan man skrive tiger:~/javaprosjekt$ cvs status en_fil.java =================================================================== File: en_fil.java Status: Locally Modified Working revision: 1.1.1.1 Tue Jan 28 19:30:38 2003 Repository revision: 1.1.1.1 /home/homej/gr/grip/cvs/javaprosjekt/en_fil.java,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Man kan da se om versjonen man jobber med er oppdatert, eller om den er eldre eller forandret i forhold til den i repository'et. I status-feltet ovenfor kan man se at denne filen har blitt endret i forhold til versjonen i repository'et. Dersom man ønsker å *oppdatere sin lokale kopi* kan man skrive tiger:~/javaprosjekt$ cvs update en_fil.java M en_fil.java For å *legge til en ny fil* man har opprettet, må man skrive to kommandoer: tiger:~/javaprosjekt$ cvs add enda_en_fil.java cvs add: scheduling file `enda_en_fil.java' for addition cvs add: use 'cvs commit' to add this file permanently tiger:~/javaprosjekt$ cvs commit -m "En ny fil" enda_en_fil.java RCS file: /home/homej/gr/grip/cvs/javaprosjekt/enda_en_fil.java,v done Checking in enda_en_fil.java; /home/homej/gr/grip/cvs/javaprosjekt/enda_en_fil.java,v -- enda_en_fil.java initial revision: 1.1 done Man kan *fjerne en fil* fra repository'et ved å skrive tiger:~/javaprosjekt$ cvs remove enda_en_fil.java cvs remove: scheduling `enda_en_fil.java' for removal cvs remove: use 'cvs commit' to remove this file permanently tiger:~/javaprosjekt$ cvs commit -m "En ny fil" enda_en_fil.java Removing enda_en_fil.java; /home/homej/gr/grip/cvs/javaprosjekt/enda_en_fil.java,v -- enda_en_fil.java new revision: delete; previous revision: 1.1 done -==- For en mer detaljert oversikt over hva som har skjedd med en fil kan man skrive tiger:~/javaprosjekt$ cvs log testfil.java RCS file: /home/homej/gr/grip/cvs/javaprosjekt/testfil.java,v Working file: testfil.java head: 1.2 branch: locks: strict access list: symbolic names: start: 1.1.1.1 eksempel: 1.1.1 keyword substitution: kv total revisions: 3; selected revisions: 3 description: ---------------------------- revision 1.2 date: 2003/01/28 19:45:54; author: grip; state: Exp; lines: +1 -1 Laget en ny utskriftsmetode ---------------------------- revision 1.1 date: 2003/01/28 19:45:20; author: grip; state: Exp; branches: 1.1.1; Initial revision ---------------------------- revision 1.1.1.1 date: 2003/01/28 19:45:20; author: grip; state: Exp; lines: +0 -0 Et java-prosjekt ============================================================================= -==- Dersom man benytter CVS i et samarbeidprosjekt, jobber alle på hver sin lokale kopi av prosjektet, men opp mot det samme CVS-repository'et. Da må alle de involverte ha riktig tilgang til dette. Dersom man har et felles område som kan benyttes til formålet, vil det være naturlig å opprette CVS-roten her. Hvis man for eksempel har fått tildelt området "/home/prosjekt/sif8005/sif8005_204", vil man bytte ut kommandoene under avsnittet /Gjøre klart for bruk av CVS/ med tiger:~$ cd /home/prosjekt/sif8005/sif8005_204 tiger:/home/prosjekt/sif8005/sif8005_204$ mkdir cvs tiger:/home/prosjekt/sif8005/sif8005_204$ export CVSROOT=/home/prosjekt/sif8005/sif8005_204/cvs tiger:/home/prosjekt/sif8005/sif8005_204$ cvs init Merk at ved å sette miljøvariablen først, kan man kutte ut det ekstra argumentet til "cvs init". Merk også at alle de involverte må sette denne miljøvariablen før de foretar utsjekkingen av sin lokale kopi (se avsnittet /Jobbe med prosjektet/). Man må også sørge for å sette rettighetene på CVS-repository'et slik at alle de involverte har tilgang. Dersom det finnes en bestemt gruppe for prosjektet, for eksempel "prog204", må man sette rettighetene slik at repository'et for prosjektet eies av denne gruppa, og at gruppa har riktige rettigheter. Når prosjektet er opprettet (vi antar igjen at det har navnet "javaprosjekt"), vil følgende kommandoer sørge for det: tiger:/home/prosjekt/sif8005/sif8005_204$ cd cvs tiger:/home/prosjekt/sif8005/sif8005_204/cvs$ chgrp -R prog204 javaprosjekt tiger:/home/prosjekt/sif8005/sif8005_204/cvs$ chmod -R g+r javaprosjekt tiger:/home/prosjekt/sif8005/sif8005_204/cvs$ find javaprosjekt -depth -type d -exec chmod g+wx {} \; Det som skjer her er at filene får gruppetilhørighet til "prog204". Deretter får gruppen leserettigheter på alle filene og underkatalogene i repository'et, og til slutt får gruppen skriverettigheter på alle katalogene i repository'et. Når det gjelder skriverettighetene er det altså rettighetene på katalogen som er avgjørende, ikke på filene selv. -==- CVS har mange andre muligheter. For hjelp om bruken av en kommando, skriv "cvs -H kommando", der kommando er en den kommandoen du vil ha hjelp om. For en mer detaljert oversikt over mulighetene i CVS kan man for eksempel ta en titt på http://www.nongnu.org/cvs/ Further reading: CVS genereltTortoiseCVSLinks in the article: http://www.nongnu.org/cvs/