Hoppa till huvudinnehållet
Institutionen för informationsteknologi

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
Uppdaterad  2008-10-09 12:26:00 av Hans Frimmel.