CVS

Z GeoWikiCZ
Verze z 13. 4. 2008, 19:12, kterou vytvořil Cepek (diskuse | příspěvky) (odstranění adresáře)

CVS je zkratkou za Concurrent Version System. CVS je systém, který slouží ke správě verzí projektu. Tyto systémy se v angličtině označují zkratkou SCM - Source Code Management nebo také Source Configuration Management.

Systém CVS spravuje jednu nebo několik skupin souborů nazývaných repozitář (anglicky repository). Každý repozitář má vlastní řízení přístupu a je dělen na menší části nazývané moduly, které mohou reprezentovat projekty nebo skupiny projektů ve stromové struktuře. Celý repozitář je uložen ve formě souborů na souborovém systému serveru. Změny jsou sledovány a uchovávány na úrovni verzí (revizí) jednotlivých souborů ve stromové struktuře projektu. Skupinu souborů lze označit jednou nálepkou (anglicky tag) a vytvářet tak různá vydání celého projektu (anglicky release). V kterémkoli okamžiku je možné vytvořit novou vývojovou větev (anglicky branch) a tu potom rozvíjet samostatně nebo ji později opět sloučit. Stejně tak je možné se kdykoli vrátit k libovolné předchozí verzi libovolného souboru.

CVS se typicky používá jako víceuživatelská klient/server aplikace. Umožňuje, aby na stejném projektu pracovalo více lidí současně a zároveň zajišťuje, že změny provedené kterýmkoli vývojářem jsou konzistentní a distribuovány ostatním. Pro větší projekty, nebo projekty na nichž se podílí více lidí (často na geograficky vzdálených místech) je použití systému pro správu verzí prakticky nezbytností.

Samotný program CVS je dodáván v základní verzi pro použití v příkazovém řádku, existují však i nadstavby pro použití v grafickém režimu, jako je třeba WinCVS a další. Také řada vývojových prostředí (například Eclipse nebo NetBeans) přímo podporuje použití CVS. Existují i jiné systémy pro správu verzí, například Subversion, SourceSafe, ClearCase a další.

Předchozí úvodní text byl převzat z Wikipedie.

Založení CVS repository

Pro založení nového repository slouží CVS příkaz init, kterému zadávame cestu, kde se má nové repository založit (jméno je pochopitelně libovolné). Například

cvs -d /home/novak/work/repository init

V podadresáři repository/CVSROOT jsou uloženy všechny administrativní soubory nového repository, např.

~/work$ ls -R repository/
repository/:
CVSROOT

repository/CVSROOT:
checkoutlist    cvswrappers,v  notify       posttag,v    taginfo
checkoutlist,v  Emptydir       notify,v     postwatch    taginfo,v
commitinfo      history        postadmin    postwatch,v  val-tags
commitinfo,v    loginfo        postadmin,v  preproxy     verifymsg
config          loginfo,v      postproxy    preproxy,v   verifymsg,v
config,v        modules        postproxy,v  rcsinfo
cvswrappers     modules,v      posttag      rcsinfo,v

repository/CVSROOT/Emptydir:

Tyto soubory jsou dále spravovány CVS serverem.

Založení nového projektu

Předpokládejme, že máme vytvořené repository a adresář s projektem, který chceme importovat do CVS repozitory. Nechť jsou například soubory projektu, keterý chceme importovat uloženy v adresáři projektA

~/work$ ls -r projektA/
src  README
cepek@gama:~/work$ ls -R projektA/
projektA/:
README  src

projektA/src:
abc.cpp  Makefile

Přejdeme do adresáře projektA a zadáme příkaz import

cvs  -d /home/novak/work/repository import -m "Initial CVS Import" ProjectName MySoftwareCompany Start
N ProjectName/README
cvs import: Importing /home/novak/work/repository/ProjectName/src
N ProjectName/src/Makefile
N ProjectName/src/abc.cpp

No conflicts created by this import

Vytvoření pracovní kopie projektu

Přejdeme do adresáře ve kterém chceme vytvořit pracovní kopii projektu a zadáme příkaz

cvs  -d /home/novak/work/repository co ProjectName cvs checkout: Updating ProjectName
U ProjectName/README
cvs checkout: Updating ProjectName/src
U ProjectName/src/Makefile
U ProjectName/src/abc.cpp

Repository

V příkazech CVS lze specifikovat repository explicitně, např.

cvs -d /usr/local/cvsroot checkout yoyodine/tc

nebo explicitně nastavením proměnné CVSROOT

export CVSROOT=/usr/local/cvsroot

parametr -d má vyšší prioritu.

Vzdálené repositáře (remote repositories) mají obecně syntax

:method:user@host:/path/to/repository

Přístup do vzdáleného repository lze umožnit přes ssh klíče. Příklad

gin@josef.fsv.cvut.cz:/home2/gin/cvsroot

Po vytvoření pracovní kopie již není nutné repository uvádět, odkaz je uložen v podadresáři CVS (který je vytvořen v každém podadresáři pracovní kopie).

Odstranění adresáře

  1. rm *soubory
  2. cvs rm *soubory
  3. cd ..
  4. cvs rm adresář

commit

Přejdeme do pracovní kopie projektu, provedené editace přeneseme do společného úložište na serveru příkaze commit (zkráceně ci)

cvs -d /home/novak/work/repository ci

cvs update

Usage: cvs update [-APCdflRp] [-k kopt] [-r rev] [-D date] [-j rev]
    [-I ign] [-W spec] [files...]
        -A      Reset any sticky tags/date/kopts.
        -P      Prune empty directories.
        -C      Overwrite locally modified files with clean repository copies.
        -d      Build directories, like checkout does.
        -f      Force a head revision match if tag/date not found.
        -l      Local directory only, no recursion.
        -R      Process directories recursively.
        -p      Send updates to standard output (avoids stickiness).
        -k kopt Use RCS kopt -k option on checkout. (is sticky)
        -r rev  Update using specified revision/tag (is sticky).
        -D date Set date to update from (is sticky).
        -j rev  Merge in changes made between current revision and rev.
        -I ign  More files to ignore (! to reset).
        -W spec Wrappers specification line.

cvs a patch

CVS umožňuje pracovat na lokální kopii zdrojových textů, která nemá povolený zápis na CVS server. Pokud chceme uložit provedené změny v lokální kopii, vyrobíme nejprve soubor změn vzhledem k CVS archivu

 cvs diff -u > my.path

Změny můžeme snadno přenést do ostré kopie (s povoleným zápisem) pomocí programu patch

 patch -p0 < my.patch