<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE artikkel PUBLIC "-//infoweb.ntnu.no//DTD Infoweb 1.0//NO"
"http://infoweb.ntnu.no/infoweb.dtd">

<artikkel spraak="no">
<tittel>CVS - kommandolinjeverktøyet</tittel>
<forfatter>grip</forfatter>
<sammendrag>CVS er et system for versjonskontroll av dokumenter</sammendrag>

<lenker>
	<infoweb aid="226" tittel="CVS generelt">CVS generelt</infoweb>
	<infoweb aid="346" tittel="TortoiseCVS">TortoiseCVS (Windows-klient)</infoweb>
</lenker>

<hoveddel>

<os1>Gjøre klart for bruk av CVS</os1>

<avsnitt>
  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 <uthev>CVS-rot</uthev>. Det er under denne at alt vil bli lagret. La oss si man ønsker å
  opprette en CVS-rot på en katalog ved navn <kommando>cvs</kommando> på sitt hjemmeområde. Man begynner med å opprette katalogen:
</avsnitt>

<avsnitt>
  <konsoll>
    tiger:~$ mkdir cvs
  </konsoll>
</avsnitt>

<avsnitt>
  Man kan så opprette CVS-roten i denne katalogen med kommandoen
</avsnitt>

<avsnitt>
  <konsoll>
    tiger:~$ cvs -d ~grip/cvs init
  </konsoll>
</avsnitt>

<avsnitt>
  Argumentet <kommando>-d ~grip/cvs</kommando> indikerer hvor CVS-roten er (bytt ut 
  <kommando>grip</kommando> med ditt eget brukernavn). 
  For å slippe å skrive dette i alle kommandoene før man har opprettet prosjektet, kan man skrive
</avsnitt>

<avsnitt>
  <konsoll>
    tiger:~$ export CVSROOT=~grip/cvs
  </konsoll>
</avsnitt>

<avsnitt>
  Dette vil opprette en miljøvariabel, <kommando>CVSROOT</kommando>, som inneholder banen til CVS-roten. 
</avsnitt>

<os1>Opprette et prosjekt</os1>

<avsnitt>
  Alt er klart til å begynne å opprette prosjekter for å lagre i CVS. La oss si at det
  finnes en katalog <kommando>java</kommando>, 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 <kommando>java</kommando>-katalogen:
</avsnitt>

<avsnitt>
  <konsoll>
    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
  </konsoll>
</avsnitt>

<avsnitt>
  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 <kommando>javaprosjekt</kommando>. Dersom man ønsker det kan man nå slette hele 
  <kommando>java</kommando>-katalogen. Alt er nemlig lagret i CVS-repository'et.
</avsnitt>

<os1>Jobbe med prosjektet</os1>

<avsnitt>
  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
</avsnitt>

<avsnitt>
  <konsoll>
    tiger:~$ cvs checkout javaprosjekt
    cvs checkout: Updating javaprosjekt
    U javaprosjekt/en_fil.java
    U javaprosjekt/testfil.java
  </konsoll>
</avsnitt>

<avsnitt>
  Det vil nå bli opprettet en kopi av javaprosjektet i katalogen <kommando>javaprosjekt</kommando>. 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 <kommando>testfil.java</kommando>, kan man <uthev>oppdatere
  repository'et</uthev> med forandringene, ved å skrive
</avsnitt>

<avsnitt>
  <konsoll>
    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
  </konsoll>
</avsnitt>

<avsnitt>
  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 å <uthev>sammenligne en lokal fil med den i repository'et</uthev>
  kan man skrive
</avsnitt>

<avsnitt>
  <konsoll>
    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)
  </konsoll>
</avsnitt>

<avsnitt>
  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 å <uthev>oppdatere sin lokale kopi</uthev> kan man skrive
</avsnitt>

<avsnitt>
  <konsoll>
    tiger:~/javaprosjekt$ cvs update en_fil.java
    M en_fil.java
  </konsoll>
</avsnitt>

<avsnitt>
  For å <uthev>legge til en ny fil</uthev> man har opprettet, må man skrive to kommandoer:
</avsnitt>

<avsnitt>
  <konsoll>
    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
  </konsoll>
</avsnitt>

<avsnitt>
  Man kan <uthev>fjerne en fil</uthev> fra repository'et ved å skrive
</avsnitt>

<avsnitt>
  <konsoll>
    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
  </konsoll>
</avsnitt>

<os1>Se på loggen for filene</os1>

<avsnitt>
  For en mer detaljert oversikt over hva som har skjedd med en fil kan man skrive
</avsnitt>

<avsnitt>
  <konsoll>
    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
    =============================================================================
  </konsoll>
</avsnitt>

<os1>CVS i samarbeidsprosjekt</os1>

<avsnitt>
  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
  <kommando>/home/prosjekt/sif8005/sif8005_204</kommando>, vil man bytte ut kommandoene under avsnittet
  <kursiv>Gjøre klart for bruk av CVS</kursiv> med
</avsnitt>

<avsnitt>
  <konsoll>
    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
  </konsoll>
</avsnitt>

<avsnitt>
  Merk at ved å sette miljøvariablen først, kan man kutte ut det ekstra argumentet til <kommando>cvs
  init</kommando>. Merk også at alle de involverte må sette denne miljøvariablen før de foretar utsjekkingen av sin lokale kopi (se avsnittet <kursiv>Jobbe med prosjektet</kursiv>).
</avsnitt>

<avsnitt>
  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 <kommando>prog204</kommando>, 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 <kommando>javaprosjekt</kommando>), vil
  følgende kommandoer sørge for det:
</avsnitt>

<avsnitt>
  <konsoll>
    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 {} \;
  </konsoll>
</avsnitt>

<avsnitt>
  Det som skjer her er at filene får gruppetilhørighet til <kommando>prog204</kommando>. 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.
</avsnitt>


<os1>Andre ressurser</os1>

<avsnitt>
  CVS har mange andre muligheter. For hjelp om bruken av en kommando, 
  skriv <kommando>cvs -H kommando</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å
  <ekstern uri="http://www.nongnu.org/cvs/">http://www.nongnu.org/cvs/</ekstern>
</avsnitt>




</hoveddel>
</artikkel>