CVS: Porovnání verzí
odstranění adresáře |
|||
Řádek 105: | Řádek 105: | ||
# cd .. | # cd .. | ||
# cvs ''rm adresář'' | # cvs ''rm adresář'' | ||
Pak lze ''adresář'' vymazat | |||
== commit == | == commit == |
Verze z 13. 4. 2008, 19:13
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
- rm *soubory
- cvs rm *soubory
- cd ..
- cvs rm adresář
Pak lze adresář vymazat
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