Snad každý z nás se při vývoji aplikací setkal s problémem uchovávání jednotlivých verzí programu v průběhu vývoje, proto vznikají prostředky usnadňující práci s různými verzemi souborů. Takové programy pak většinou umožňují i spolupráci více lidí na stejném projektu. Můžeme tedy způsoby použití takovýchto programů shrnout do několika okruhů:
Příkladem takového programu je CVS, který poskytuje všechny výše uvedené služby, navíc umožňuje ve stejné depozitáři uchovávat více projektů (vlastně jen vhodně rozvětvenou adresářovou strukturu).
Nejprve je třeba pomocí programu cvsinit vytvořit nový depozitář. Je-li tento depozitář vytvořen, musí si každý uživatel nastavit proměnnou shellu CVSROOT (nejlépe v .profile apod.), ve které je odkaz na nějaký depozitář CVS (může obsahovat i jméno serveru pro použití přes Internet). Poté může uživatel provádět všechny dále popsané příkazy.
cvs [volby cvs] příkaz [volby příkazu] [argumenty příkazu]
CVS je nadstavbou RCS (Revision Control System - viz. manálová stránka
rcs(1)). Rozšiřuje jeho působení z jednoho adresáře na celý systém
adresářů. CVS tak může spravovat verze programů a řešit současnou editaci
souborů při týmové spolupráci.
CVS si udržuje kopii všech souborů - tzv. depozitář (source repository),
který obsahuje všechny potřebné informace pro přístup ke starším verzím
podle času, data nebo symbolického označení verze.
-H
... nápověda, pokud je za příkazem jméno příkazu, je zobrazena napověda
k tomuto příkazu, jinak nápověda se seznamem příkazů.
-Q
... CVS bude generovat výstup jen při vážných problémech během vykonávání
příkazu.
-q
... potlačí generování nepodstatných komentářů jako je rekursivní procházení
adresářů apod.
-b binadr
... CVS použije parametr binadr jako místo, kde hledá binární soubory
RCS.
-d korenadr
... za kořenový adresář depozitáře použije parametr korenadr, přetížíme
tím proměnnou CVSROOT.
-e editor
... k zadávání poznámek do souboru záznamům (log file) použije CVS
editor zadaný v parametru, přetížíme tím proměnné
CVSEDITOR a EDITOR.
-f
... nečte inicializační soubor .cvsrc
-l
... zakáže zápis do souboru záznamů, ale příkaz provede.
-n
... neprovede příkaz, pouze ohlásí akce, jako by ho ve skutečnosti
provedl.
-t
... vypisuje podrobnější informace o provádění příkazu (vhodné používat
společně s volbou -n pro zamezení nevhodného dopadu příkazů).
-r
... nově vytvářené soubory jsou vytvořeny jen pro čtení, přetížíme
tím proměnnou CVSREAD.
-v
... vypíše verzi a copyright CVS.
-w
... nově vytvářené soubory jsou vytvořeny jen pro čtení i zápis (standartní
nastavení), přetížíme tím proměnnou CVSREAD.
-z urovenkomprese
... pro přenos souborů po síti použije gzip s úrovní komprese danou
parametrem, vyžaduje přítomnost programu gzip v prohledávaných adresářích
(proměnná PATH) na obou koncích spojení.
Kromě volby -H musí být vždy specifikován příkaz, který se má provést!
Startovací soubor CVS: CVS při startu vždy čte soubor .cvsrc z domovského adresáře uživatele, který spouští CVS.
Seznam příkazů CVS:
Ne všechny následující volby lze použít se všemy příkazy! Volby uvedené u jednotlivých příkazů mohou mít různé chovaní příkaz od příkazu.
-D specdata
... použije nejposlednější revizi před datem specdata, příklady specifikace
data:
1 month ago
2 hours ago
400000 seconds ago
last year
last Monday
yesterday
a fortnight ago
3/31/92 10:00:07 PST
January 23, 1987 10:05pm
22:00 GMT
-f
... CVS při specifikaci data nebo označení souboru ignoruje soubory
bez značky nebo novější, pomocí této volby dostanete soubory, které nesplňují
podmínku na značku nebo datum.
-H
... vypíše nápovědu pro daný příkaz.
-k kflag
... nahrazuje standartní zpracování klíčových slov pomocí RCS, můžete
použít všechny kflags popsané v co(1).
-l
... omezí práci CVS jen na aktuální adresář (neprochází podadresáře).
-n
... zakáže spouštění jakéhokoliv programu pro checkout/commit/tag (pro
každou akci může být specifikován program, který při ní bude spuštěn).
-P
... všechny adresáře v pracovní kopii, které zůstanou prázdné po provedení
update, checkout budou smazány (ne z depozitáře).
-p
... soubory čtené z depozitáře budou poslány na standatní výstup místo
do adresáře.
-r tag
... použije pro daný příkaz revizi označenou jako tag, kromě uživatelem
definovaných značek jsou dostupné ještě HEAD (pro poslední revizi) a BASE
(pro revizi naposledy vytaženou z depozitáře).
add [-k kflag]
[-m 'message'] files...
... přidá do depozitáře soubory ´files´, do souboru záznamů připíše
navíc zprávu 'message', volba -k je užitečná při ukládání binárních souborů
(použijeme volbu -kb).
admin [rcs-options] files...
... jenom předá parametry a volby programu RCS.
checkout [options] modules...
... vytvoří kopii souborů z depozitáře specifikovaných moduly do aktuálního
adresáře, tento příkaz je nutno použít před většinou ostatních příkazů,
moduly jsou symbolická jména jednotlivých částí depozitáře, podle jejich
obsahu může 'checkout' rekursivně vytvářet adresáře.
commit
[ - lnR] [ - m 'log_message' | - f file] [ -r revision]
... promítne změny v kopii do depozitáře, pokud nespecifikujete které
soubory uložit, budou uloženy všechny soubory v aktuálním adresáři včeně
podadresářů, CVS přepisuje jen soubory skutečně změněné, zároveň kontroluje,
zda byly změny provdeny v poslední verzi dokumentů, je-li vše vpořádku,
je vyvolán editor pro zadání zápisu do souboru záznamů (pokud nepoužijeme
volbu -m nebo -f), volbou -r přepíšeme soubory v dané revizi.
diff
[ - kl] [rcsdiff_options] [[ - r rev1 | - D date1] [ -r rev2 | - D date2]]
... porovnává revizi se soubory v kopii, příp. revizi s jinou revizí,
nebo verze podle data, je možno provádět i jiná porovnávání, jež jsou specifikována
v rcsdiff(1), pokud neurčíte, které soubory porovnávat, budou porovnány
všechny soubory v aktuálním adresáři.
export
[ - flNnQq] - r rev| - D date [ - d dir] [ -k kflag] module...
... varianta příkazu 'checkout', která do kopie nepřídává řídící soubory
CVS a může tak sloužit k připravě distribuce daného programu.
history
[-report] [-flags] [-options args] [files...]
... vyžaduje existenci souboru `$CVSROOT/CVSROOT/history', CVS v tomto
souboru ukládá informace o všech operacích checkout, commit, rtag, update
a release, tento příkaz používá volby
`-f', `-l', `-n' a `- p' jinak než je jejich obvyklé použití, volby
typu -report jsou tyto:
-c ... vypíše všechna použití 'commit'
-m modul ... všechny operace s daným modulem
-o ... informace o vytažených modulech
-T ... informace o značkách
-x term ... jako term můžete použít několik značek (i v kombinaci),
které určují o čem chcete znát informace (pro význam značek viz. manuálová
stránka)
-e ... jakoby jste použili '-x MACFROGWUT'
-z zone ... při výpisu použije časovou zónu zone
Další volby -flags:
-a ... informace o všech uživatelích
-l ... pouze poslední změny
-w ... jen změny provedéné v adresáři, odkud je příkaz spouštěn
Další volby -options args:
-b str ... vypíše informace až do výskytu řetězce 'str'
-D date ... informace od data 'date'
-r rev ... informace od revize 'rev'
-t tag ... informace od značky 'tag'
-u name ... změny provedené daným uživatelem
import [-options]
repository vendortag releasetag...
... do zadaného depozitáře (nebo cesty v něm) přidá celou hierarchii,
pokud zadaný depozitář neexistuje, je tento vytvořen, význam dalších parametrů
viz. manuálové stránky cvs(1), ve volbách je možno nastavit různé
parametry týkající se data souborů, verzí a vyjmutí souborů z importování.
log [-l] rlog-options
[files...]
... zobrazuje záznamy pro zadané soubory, volá nástroj RCS zvaný rlog,
podporuje tedy všechny volby popsané v rlog(1).
rdiff
[-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules...
... vytváří opravovací souboru ve formátu patch(1), kombinací
voleb -r a -D lze vytvořit patch mezi libovolnými verzemi programu, další
volby viz. manálové stránky.
release [-dQq] modules...
... slouží k bezpečnému smazání pracovní kopie depozitáře, zkontroluje,
zda všechny provedné změny byly promítnuty do depozitáře.
remove [-lR] [files...]
... po provedení 'commit' budou specifikované soubory smazány z depozitáře.
rtag
[ - falnRQq] [ - b] [ - d] [ - r tag | -D date] symbolic_tag
... označí danou verzi souborů symbolickou značkou symbolic_tag, volba
-b umožňuje vytvářet paralelní verze souborů, příkaz pracuje rekursivně,
s touto akcí může být spojeno spuštění nějakého programu (poslání mailu,
...).
status [-lRqQ] [-v]
[files...]
... vypíše stav zadaných souborů, nejsou-li žádné zadány, vypíše stav
pro všecny soubory v aktuálním adresáři (verze souborů, zda byly změněny,
...).
tag
[- lQqR] [ - F] [ - b] [ - d] [ - r tag | - D date] [ -
... symbolickou značkou označí verze souborů, které jsou právě v aktuální
adresáří, pracuje rekursivně.
update
[-AdflPpQqR] [-d] [-r tag|-D date] files...
... verze souborů ve vaší kopii budou sesynchronizovány se soubory
v depozitáři, CVS vás informuje o akcích prováděných s jednotlivými soubory,
každý soubor je zobrazen na zvláštní řádce, na začátku každé řádky je písmeno
označující akci: U ... aktualizován, A ... přidán, R ... smazán, M ...
změněn, C ... konflikt (konfliktní část je označena symboly '#'), ? ...
soubor je ve vaší kopii, ale ne v depozitáři, další volby viz. manuálové
stránky.
- v domovském adresáři uživatele:
.cvsrc
... inicializační soubor CVS, zde mohou být upraveny standartní volby
k jednotlivým příkazům (viz. výše).
.cvswrappers
... soubor obsahující dodatek pro daného uživatele k zápisu do soubou
záznamů (log file).
- v pracovním adresáři:
CVS
... adresář obsahující řídící soubory pro CVS.
CVS/Entries (příp. CVS/Entries.Backup)
..v tomto souboru je na každém řádku napsán jeden z příkazů CVS a za
ním argumenty, které budou použity při každém volání specifikovaného příkazu.
CVS/Entries.Static
... při existenci tohoto souboru nebudou při operaci update přidány
žádné nové soubory.
CVS/Root
... cesta do CVSROOT v okamžiku operace checkout, používá se při neexistenci
proměnné CVSROOT, je-li obsah této proměnné jiný než obsah souboru, je
zobrazeno varování, může být přetíženo proměnnou CVS_IGNORE_REMOTE_ROOT.
CVS/Repository
... cesta k adresáři v rámci depozitáře.
CVS/Tag
... při použití volby -r nebo -D označuje příslušné nastavení.
CVS/Checkin.prog
... jméno programu spouštěného při operaci commit.
CVS/Update.prog
... jméno programu spouštěného při operaci update.
- v depozitáři:
$CVSROOT/CVSROOT/commitinfo
Zde můžete definovat programy, které budou spuštěny při příkazu commit.
Používají se zejména pro ověření toho, zda přidané a změněné soubory jsou
skutečně připraveny k uložení do depozitáře (např. kontrola konzistence).
$CVSROOT/CVSROOT/cvsignore
Soubor se seznamem souborů, které budou vynechány při operaci update.
$CVSROOT/CVSROOT/cvswrappers
Zde můžete změnit soubory, které budou použity pro vytažení a uložení
souborů z depozitáře.
$CVSROOT/CVSROOT/editinfo
Zde určujete program, který bude použit pro editaci záznamů v souboru
záznamů při příkazu commit.
$CVSROOT/CVSROOT/history
Zde je záznam o akcích provedených s depozitářem.
$CVSROOT/CVSROOT/loginfo
Zde můžete specifikovat programy, které budou spuštěny po každém příkazu
commit a slouží pro zapsání dodatečné informace do záznamového souboru
(log file), nebo zaslání nějaké informace emailem.
$CVSROOT/CVSROOT/modules
Obsahuje symbolická jména pro jednotlivé kolekce programů, pokud tento
soubor neexistuje, musíte pro určování souborů používat celou cestu, po
každé změně souboru je třeba spustit program mkmodules(1).
$CVSROOT/CVSROOT/rcsinfo
Zde můžete uvést podobu záznamů v souboru záznamů.
$CVSROOT/CVSROOT/taginfo
Zde můžete specifikovat programy, které budou spuštěny po každém příkazu
tag nebo rtag a slouží pro zapsání dodatečné informace do záznamového souboru,
nebo zaslání nějaké informace emailem.
$CVSROOT/MODULE/Attic
Adresář pro uchovávání smazaných souborů.
$CVSROOT/#cvs.lock
Zamykací adresář pro citlivé operace RCS (tj. mohlo by při nich dojít
k poškození depozitáře).
$CVSROOT/#cvs.tfl.pid
Dočasný zamykací soubor pro depozitář.
$CVSROOT/#cvs.rfl.pid
Zámek pro čtení.
$CVSROOT/#cvs.wfl.pid
Zámek pro zápis.
-viz. manuálová stránka cvsinit(8)
Obsah adresáře $CVSROOT vytvoří program cvsinit, což je inicilazační skript pro CVS. Vytvoří depozitář v adresáři určeném proměnnou CVSROOT a zapíše sem soubory nutné pro spuštění CVS.
CVSROOT ... kořenový adresář pro depozitář a řídící soubory,
může obsahovat i jméno počítače, kde je depozitář uložen (např. ss1000.ms.mff.cuni.cz:/usr/local/cvsroot).
CVSREAD ... je-li nastavena, jsou všechny soubory v kopii vytvořeny
jen pro čtení.
RCSBIN ... cesta k soubrům RCS.
CVSEDITOR ... standartní editor používaný pro úpravy zápisů do souboru
záznamů.
CVS_IGNORE_REMOTE_ROOT ... je-li nastavena, jsou všechny odkazy
na vzdálené počítače ignorovány.
CVS_RSH ... zde je jméno shellu na vzdáleném počítači, který je
používán ke spouštění serveru.
CVS_SERVER ... jméno serverového programu.
CVSWRAPPERS ... text pro přidání do zápisu v souboru se záznamy.
Manuálové stránky: cvs(1), cvs(5), cvsinit(8)