CVS och SVN

Från Lysators datorhandbok, den ultimata referensen.
(Omdirigerad från Gitmigrering)
Hoppa till navigering Hoppa till sök

CVS är ett väldigt användbart verktyg. SVN är nyare. På denna sida beskrivs hur du använder versionshantering hos Lysator.

Det gamla sättet, /lysator/cvsroot

Sedan länge finns en cvsroot som alla Lysiter på ett någorlunda enkelt sätt kan skapa ett repository i. Problemet med den lösningen är att endast Lysiter kan komma åt den, och anonym access är inte möjlig.

Hur man i detalj använder /lysator/cvsroot beskrivs inte på denna oebbsida.

Det nyare sättet, LysCVS och LSVN

Eftersom det verkade finnas ett behov av ett repository där man dels kan ha med icke-Lysiter som utvecklare, och dels tillåta anonym access, utvecklades sommaren 2001 en lösning som tillåter detta.

Sedan dess har även stöd för SVN dykt upp.

Men nu är denna lösning under avveckling. Du rekommenderas att använda Git i stället.

Lösningen går under namnen LysCVS/LSVN och finns att beskåda bland annat i form av http://cvs.lysator.liu.se/.

LysCVS/LSVN har ett oebbaserat administrationsinterface där du själv som vanlig användare kan skapa projekt, lägga till användare till detta och så vidare. Nedan beskrivs hur du gör.


Att skapa nya projekt i LysCVS och LSVN

LysCVS / LSVN bygger på konceptet projekt, som kan vara av typen cvs eller svn. Varje cvs-projekt har en egen CVSROOT och kan ha flera CVS-moduler. Det går bra att ha samma namn på en modul och projektet som modulen tillhör.

Peka din webläsare på https://admin.lysator.liu.se/ och logga in med ditt vanliga Lysatorlogin och -lösen. Klicka på LysCVS/LSVN så får du upp en huvudsida där du kan se vilka projekt du är medlem i och/eller administratör för.

För att skapa ett nytt projekt använder du menyalternativet "New Project" i menyn till vänster. Välj om du vill använda cvs, eller det nyare svn. Skriv vad du vill att ditt projekt ska heta, och tryck på knappen märkt "Create!". Ditt projekt är nu skapat.

OBSERVERA att det tar en stund, i nuläget maximalt en kvart, innan ditt projekt går att använda

Att börja använda det nyligen skapade projektet (cvs)

Enklast är att använda cvs import. Säg att du nyss har skapat projektet foo i lysCVS. Vidare har du ett gäng filer som ska finnas i foo, de existerar i katalogen /home/xyzzy/bar. Du vill att filerna ska hamna i katalogen gazonk under cvsrooten för foo I så fall gör du ungefär såhär:

$ cd /home/xyzzy/bar
$ export CVS_RSH=ssh
$ cvs -d <username>@cvs.lysator.liu.se:/cvsroot/foo import gazonk <username> start;

De två sista argumenten är egentligen vendor och tag, så du kan hitta på nått bättre än ditt användarnamn och "start" om du så önskar.

Nu kan du, från en annan katalog, checka ut dina filer med

cvs -d <username>@cvs.lysator.liu.se:/cvsroot/foo co gazonk

Att börja använda det nyligen skapade projektet (svn)

Protokollet som stöds heter svn+ssh. OBS: Det sägs vara normalt att behöva ange lösenord flera gånger i rad (ungefär 3) med svn+ssh

Kör

svn co svn+ssh://<username>@lsvn.lysator.liu.se/svnroot/<projektnamn>

för att checka ut ditt projekt. Ta reda på mer om svn med

svn help

eller leta upp dokumentationen på oebben.

Att lägga till nya användare i ett projekt

För att möjliggöra skrivaccess för andra än dig själv lägger du till användare till dina projekt.

Gå till huvudsidan och klicka på länken märkt "administrate" för det projekt du vill lägga till en användare till. Skriv mailadressen för användaren i rutan, och tryck "Add".

Om det är en Lysatoranvändare du lägger till är det inget mer du behöver göra, för då finns redan alla uppgifter i NIS. Om det är en extern (icke-Lysit) du vill lägga till får du fylla i riktigt namn och användarnamn på personen ifråga. OBSERVERA att användarnamnet måste börja på _cvs_. Detta för att skydda Lysators namnrymd. Den externa personen får ett mail med instruktioner om inloggningsnamn och lösenord - ett automatgenererat lösenord som är fult som stryk.

Även här tar det en kvart innan användaren kan använda cvs över ssh. Däremot kan hen logga in i cvsadministrationssystemet, exempelvis för att byta lösenord eller lägga till SSH-nycklar.

Att ta bort användare i ett projekt

Gå in på administrationssidan för ett projekt och tryck på "Remove"-knappen för den användare du inte vill ha kvar i ditt projekt. Användaren kan nu inte längre skriva eller läsa repositoryt. Däremot finns användaren kvar i systemet, så du kan enkelt lägga till henom igen.

OBSERVERA att det går utmärkt att ta bort sig själv, och då blir det svårt...

Att bestämma vem som får administrera ett projekt

Du kan låta andra (även externa användare) bestämma vem som får lägga till/ta bort användare och huruvida projektet finns tillgängligt anonymt. Gå in på administrationssidan för projektet och tryck på "toggle administration rights" för personen.

Att tillåta/otillåta anonym access till projektet

På administrationssidan för projektet finns en toggle-knapp för att bestämma om det ska gå att komma åt projektet med pserver anonymt. Om så är fallet visas den CVSROOT som ska användas i så fall, vilket kommer att vara :pserver:anonymous@cvs.lysator.liu.se:/cvsroot/<projekt>.

Med pserver måste man logga in först - det gör man med ett tomt lösenord (enter vid lösenordsfrågan, liksom).

OBSERVERA att det tar en kvart innan projektet är åtkomligt anonymt. Däremot blir projektet oåtkomligt så fort du togglar tillbaka. Fråga inte.

Att tillåta/otillåta webaccess till projektet

Liksom du kan bestämma om projektet ska vara anonymt åtkombart med pserver så kan du bestämma om projektet ska vara åtkombart med ViewCVS, en web-cvs-frontända. Det gör du genom att toggla knappen för "ViewCVS access". Ändringen får omedelbar effekt.

Att lägga till SSH-nycklar

Det är rätt tradigt att behöva skriva in sitt lösenord var gång man ska utföra ett cvs-kommando. Därför användar man med fördel ssh-nycklar, gärna i kombination med ssh-agent. För att se hur man gör detta på Lysator läs SSH.

Eftersom du varken som vanlig användare eller extern dito kommer åt CVS-burken med ett vanligt skal läggs sådana nycklar till genom att välja "Edit SSH keys" och klistra in de nycklar du vill ha. Servern stödjer enbart ssh v2.

Anledningen till att även Lysatoranvändare måste lägga till sina nycklar på detta sätt är att CVS-servern av säkerhetsskäl ej monterar Lysators vanliga NFS-namnrymd.

Även här tar det en kvart innan du kan logga in med din nyckel.

Ett annat sätt att slippa skriva lösenord varje gång är att använda Niels Möllers lsh i "Gateway-mode". Dvs, på din dator exekverar du

lsh -G -N -l <användarnamn> cvs.lysator.liu.se

och skriver in ditt lösenord. Sen sätter du miljövariabeln CVS_RSH till "lshg". Klart!

Logga ut

Hur svårt kan det vara? :-)

Du blir automatiskt utloggad om du inte gör någonting på en kvart.

Att överföra gamla repositories

Jodå, det går. Fast inte utan interaktion av en root. Skapa först projektet i lysCVS. Packa sedan ihop ditt repository i en tarboll och tala om var den finns för rötterna så ska vi nog kunna ordna den saken.

Framtida planer

Umm.. Inga direkta just nu. Kom gärna med förslag!

Information om systemet

LysCVS består av en kombination av vanligt förekommande fri programvara samt ett gäng lokalt utvecklade hack. Bland annat används:

Den lokalt utvecklade programvaran är mestadels utvecklad av Erik Forsberg och finns att hämta här.

Gitmigrering

Om du idag har ett projekt som hostas på cvs.lysator.liu.se eller lsvn.lysator.liu.se måste du migrera det.

CVS -> Git

Det finns många sätt att konvertera från CVS till Git. Här beskriver jag "git cvsimport" som har en stor fördel: det fungerar även via nätverk, så man behöver inte ha hela CVS-arkivet på en lokalt åtkomlig disk. Det innebär att du kan använda den här metoden på egen hand, utan att behöva be root om hjälp.

Det finns några problem med den här metoden, som listas i manualsidan. Om arkivet är stort kan det också vara en långsam metod. Det finns andra metoder, t ex cvs2git som kräver direkt tillgång till filerna. Kontakta vid behov root, så kan vi kopiera filerna till din hemkatalog.

För de flesta arkiv på cvs.lysator.liu.se torde den här metoden fungera utmärkt.

Börja med att logga in på en av Lysators datorer, t ex faust som har all nödvändig programvara installerad. Checka ut koden. Här använder vi modulen accesslog som ett exempel:

cvs -d ceder@cvs.lysator.liu.se:/cvsroot/accesslog co accesslog
cd accesslog
cvs log | sed -n 's/^date: .* author: \([^;]*\);  state: .* lines:.*/\1/p'|uniq|sort|uniq>../accesslog.authors

Filen accesslog.authors innehåller nu en lista på alla användare som gjort en commit. Editera den, så att den översätter till det format som Git vill ha. Exempel:

ceder=Per Cederqvist <ceder@lysator.liu.se>
inge=Inge Wallin <inge@lysator.liu.se>

Kör sedan kommandot som gör själva konverteringen till Git:

git cvsimport -A ../accesslog.authors -R -k -C ../accesslog.git

Om allt gick bra har du nu ett Git-repository i ../accesslog.git. Följ instruktionerna nedan för att publicera det på git.lysator.liu.se.

Subversion -> Git

Instruktionerna på http://john.albin.net/git/convert-subversion-to-git ger ett bra resultat. Notera att access via http inte fungerar längre, men du kan komma åt ditt projekt med något i stil med:

svn co svn+ssh://ceder@lsvn.lysator.liu.se/svnroot/kernelwatch

Instruktionerna förutsätter att du använd en standardlayout med trunk, branches och tags. Men de ger en bra grund även om du gjort annorlunda.

Publicera Git-arkivet på git.lysator.liu.se

Logga in på https://git.lysator.liu.se/ och tryck på "New project"-knappen. Fyll i lämpliga värden. Om projektet är ett samarbetsprojekt kan det vara lämpligt att först skapa en grupp och ange den gruppen som "Namespace". Tryck på "Create project" när du fyllt i alla uppgifter.

Nu kommer det upp en sida där det under rubriken "Existing Git Repo?" står hur du gör för att publicera ditt repository. Följ instruktionerna:

cd ../accesslog.git
git remote add origin git@git.lysator.liu.se:ceder/accesslog.git
git push -u origin master

Om ditt projekt innehåller flera grenar och taggar som du vill publicera kan du ersätta den sista raden med:

git branch -d origin # git cvsimport skapar en extra gren som heter "origin".  Ta bort den -- det är samma sak som master.
git push -u origin --all # Publicera alla grenar (utom origin som vi just tog bort).
git push origin --tags # Publicera alla taggar.