Lokalt CVS-repository
För studenter (eller anställda) som vill skapa ett mindre CVS-repository exempelvis för uppgifter i en kurs så brukar det räcka med att skapa ett lokalt repository. CVS-servern är tänkt för lite mer långsiktiga repositoryn som ex. projekt, exjobb osv.
För att det skall fungera smidigt så bör man sätta upp rättigheter mha ACL:er (Access Control List) så att man garanterar att alla medlemmar kan skriva i repositoryt.
Skapa ett repository
I detta exempel skapar användaren 'user1' (studentanvändare har alltid "user names" i stil med abcd1234) ett repository som han delar med användarna 'user2' och 'user3'. Disk-kvotan inte är beroende av vart filerna ligger utan vem som äger filerna.
Observera att ordningen är viktig, om cvs init görs före setfacl så kommer rättigheterna att bli fel.
- {user1}% export CVSROOT=:local:/home/user1/CVS
- {user1}% mkdir CVS
- {user1}% setfacl -s user::rwx,group::---,mask:rwx,other:--- CVS
- {user1}% setfacl -m d:user::rwx,d:group::---,d:mask:rwx,d:other:--- CVS
- {user1}% setfacl -m user:user1:rwx,d:user:user1:rwx CVS
- {user1}% setfacl -m user:user2:rwx,d:user:user2:rwx CVS
- {user1}% setfacl -m user:user3:rwx,d:user:user3:rwx CVS
- {user1}% cvs init
Notera även att de andra användarna inte behöver kunna läsa innehållet i katalogerna ovanför repositoryt, det enda som krävs är att dom har x-biten på katalogerna.
- {user2}% ls -l ~user1
- /home/user1: Permission denied
- total 8
- {user2}% ls -ld ~user1
- drwx--x--x 71 user1 guest 3584 Mar 24 13:11 /home/user1
- {user2}% ls -l ~user1/CVS
- total 3
- drwx--- ---+ 3 user1 guest 1024 Mar 24 13:11 CVSROOT
Så länge alla CVS-operationer görs på vårat UNIX-system kan man behålla CVSROOT satt till :local:/home/user1/CVS, men om behovet av extern access uppstår (ex. från en bärbar dator) så måste man byta till ":ext:"-metoden
- {user3}% export CVSROOT=:ext:user3@someserver.it.uu.se:/home/user1/CVS
- {user3}% export CVS_RSH=ssh
Lägga till och bort användares rättigheter.
Om en användare ska läggas till efter att projektbanken är i drift, måste alla filer och kataloger i den uppdateras (lämpligt av user1, som äger katalogen). Det görs enklast genom att söka efter alla filer i katalogen mha find, och för varje fil ändra rättigheterna med setfacl (abcd1234 är den nya användaren):
- find /home/user1/CVS -type d -exec /bin/setfacl -m u:abcd1234:rwx,d:u:abcd1234:rwx {} \;
- find /home/user1/CVS -type f -exec /bin/setfacl -m u:abcd1234:rwx {} \;
För att ta bort en användare, använd -d istället för -m
Kontrollera att resultatet är det rimligt, genom att titta om alla användare finns listade och med rätt rättigheter (vi tittar i exemplet bara i katalogen själv, inte i underkataloger eller filer):
- getfacl /home/user1/CVS
obs! otestat mot CVS - den som testar först, rapportera om det gick bra/något inte gick bra.
Använda projektbanken (repositoryt)
För att undvika att i fortsättningen behöva ange sökvägen (-d home/user1/CVS)) i varje cvs-kommando, sätter berörda användare lämpligen alltid env-variabeln CVSROOT enligt ovan, dvs alla användare pekar till katalogen CVS i /home/user1:
- export CVSROOT=:local:/home/user1/CVS
Skapa projektbanken (repository) "anka". Detta görs av någon (lämpligtvis user1) en gång, sedan kan alla användare lägga till filer efter hand. Observera att man skapar en lokal katalog (man kan även lägga filer i den, som då blir med i "anka" direkt från start) där kommandot utförs.
- mkdir minCVSkopia
- cd minCVSkopia
- cvs import -m "Skapar projektet anka" anka Mittnamn Ankdamm
Nu kan alla användare som är med i projektet (i praktiken de som har läsrättigheter till /home/user1/CVS) hämta sin egen kopia, lägga till och modifiera filer. Men observera att följande kommandon inte gör att filerna flyttas till banken "anka" - de är fortfarande lokala instanser.
- cvs checkout anka
- cd anka/
- echo "Skapar en testfil" > hej.text
- cvs add hej.text
För att förändringarna ska träda i kraft, måste banken "anka" uppdateras med de lokala förändringar man gjort. Om konflikt uppstår (ex. om två användare ändrat i samma fil) får man ett felmeddelande, och i filen finns nu konfliktinformation tillagd (sök efter "<<<". Lös konflikten i den lokala kopian (gör så filen ser bra ut igen genom att redigera i konfliktzonerna i filen), och uppdatera sedan på nytt.
- cvs commit -m "Uppdaterar anka med en ny fil" hej.text
Uppdatera ofta den lokala kopian så att den är i linje med förändringar från banken "anka", och samtidigt vid behov skapa nya lokala kataloger och ta bort oanvända filer:
- cvs update -d -P