Hlavní navigace

CVS pro každého (1) - základy

Stanislav Brabec

„Mám verzi ze včerejška a pořád se hroutí na řádku 250, co mám dělat?“ „Je to opraveno, nahraj si dnešní verzi.“ Tak nějak může vypadat debata vývojáře s uživatelem programu. Je to právě CVS, které nám umožňuje mít v počítači absolutně aktuální verzi programu. Dnes si ukážeme na jednoduchém příkladu, že stáhnout program z CVS není žádná magie a že to není o nic složitější než třeba FTP.

V našem krátkém seriálu se nebudeme snažit popsat všechny detaily systému CVS, ale naučíme se stáhnout si program, přecházet mezi větvemi, zkompilovat, případně odeslat do CVS drobné opravy či překlad.

CVS je zkratka z názvu Concurrent Versions System, což lze snad přeložit jako „systém souběžných verzí“. Tím chtěli autoři naznačit asi tolik, že v systému CVS jsou uloženy všechny verze zdrojového kódu a v případě potřeby se lze ke kterékoliv starší verzi vrátit. Zároveň to znamená, že souběžně může pracovat se zdrojovým kódem více programátorů, aniž by se jim cokoli navzájem přepisovalo, a CVS pomáhá okamžitě sdílet jejich výsledky.

Repozitář a pracovní adresář

Repozitář je zvláštní struktura, do které si CVS ukládá své soubory. Pro běžnou práci s CVS naprosto nepotřebujeme znát jeho strukturu, stačí, když známe jeho síťovou adresu. Ta může vypadat třeba takto:

:pserver:anonymous@anoncvs.gnome.org:/cvs/gnome

Repozitář obsahuje všechny verze souborů ve zvláštním formátu.

Pomocí programu cvs získáme z repozitáře kopii souborů v určité verzi – to je pracovní adresář. Ten poznáme podle toho, že má v každém adresáři podadresář CVS, který obsahuje několik speciálních souborů. S pracovním adresářem můžeme nakládat různými způsoby – použít ho ke kompilaci, jako podklad pro získání jiné verze z CVS, nebo jako pracovní kopii pro editaci zdrojového kódu. Máme-li zápisové právo do repozitáře, můžeme do něj změny uložit.

Větve a značky

Aby bylo možné vytvořit dvě vývojové větve téhož programu nebo si označit některou z konečných verzí, jsou v CVS k dispozici značky (tags) a větve (branches).

Pokud vývojář dojde k závěru, že nějaká verze je zralá k vydání, provede označkování souborů. CVS si zaznamená stav, ve kterém se nacházejí soubory projektu – udělá si u tohoto stavu značku. Každý si může nahrát přesně tuto verzi a může se k ní kdykoliv vrátit.

U složitějších projektů běží často souběžný vývoj dvou verzí – stabilní, ve které se provádějí pouze opravy chyb, a vývojové, kde si programátoři mohou dovolit větší změny. I to CVS umí. Slouží k tomu větve. V určitém okamžiku se vývoj zdrojového kódu rozštěpí a tyto větve spolu nadále nekomunikují. Zůstávají však součástí téhož repozitáře.

Větvení je možné opakovat. U velmi složitých projektů, jakým je například Mozilla, se vytváří vývojová větev před každou vydanou verzí (viz tento obrázek).

Moduly

U velkých projektů se často stává, že část kódu se opakuje v různých projektech. Aby jí nebylo nutné udržovat v několika kopiích, nabízí CVS moduly. Při stažení projektu se nám v pracovním adresáři tyto moduly složí a vytvoří společnou strukturu.

Anonymní CVS

Mnohé projekty nabízejí anonymní CVS s přístupem pouze pro čtení. Pro přístup k aktuálnímu kódu pak nepotřebujeme žádné povolení –

stačí si jej stáhnout. U velkých projektů existují i anonymní CVS servery – ty bývají většinou zhruba o hodinu opožděné oproti vyvojářskému CVS.

Pokud nechcete na stránkách dokumentace hledat heslo, pak vězte, že nejčastější hesla pro přístup k anonymnímu CVS jsou: prázdný řetězec, anonymous, anoncvs, guest a cvs.

Program cvs

K práci s CVS slouží stejnojmenný program, pracující na příkazové řádce. Existují i GUI a WWW rozhraní, ale nikdy jsem po nich nepátral, neboť si s příkazovou řádkou plně vystačím.

Zadáváme-li příkazy pro CVS, je přeba pamatovat, že argument příkazu cvs sestává ze tří částí (v tomto pořadí): obecné volby, název příkazu, volby příkazu a jméno adresáře, modulu či souboru. Obecnými volbami jsou hlavně určení repozitáře a volba komprese, příkaz udává akci, kterou chceme provést (viz cvs –help commands) a volby příkazu jsou volby pro zadaný příkaz (např. větev, rekurzivita apod. – viz

cvs –help příkaz).

Správná volba komprese nám může ušetřit kapacitu linky a čas. V praxi se osvědčila následující metoda: U málo navštěvovaných projektů je vhodná maximální komprese -z9. U velmi zatížených projektů bývá vhodné kompresi snížit, např. na -z3 nebo až

-z1, protože poměrně malý zisk z nižšího zatížení linky při vyšší kompresi vykoupíme o mnoho vyšším požadavkem na strojový čas serveru, a tedy i pomalejší odezvou.

Běžně používané volby si můžeme zaznamenat do souboru ~/.cvsrc, abychom je vždy nemuseli vypisovat do příkazového řádku. Ten může vypadat například takto:

cvs -z3

Ukázka praktické práce s CVS

V naší ukázce si krok po kroku ukážeme kompilaci knihovny Glib, která je nejzákladnější knihovnou projektu GNOME/GTK.

Ukázka zdaleka nepokrývá všechny možnosti CVS, ale pouze základní použití.

Nejdříve musíme určit, s jakým repozitářem budeme pracovat. Lze to udělat dvěma způsoby: definicí proměnné CVSROOT a parametrem -d u novějších verzí CVS.

CVSROOT=:pserver:anonymous@anoncvs.gnome.org:/cvs/gnome
export CVSROOT

Příkaz login

Při vůbec prvním přístupu k repozitáři je třeba se přihlásit příkazem login:

cvs login

Nyní zadáme heslo (prázdný řetězec). Program si jej zaznamená do souboru ~/.cvspass, a proto se příště již nemusíme přihlašovat. Pokud jsme paranoidní, můžeme po skončení práce použít příkaz logout. Ten heslo ze souboru ~/.cvspass vymaže.

Příkaz checkout

Slouží ke stažení zadaného pracovního adresáře nebo souboru.

Užitečné volby:

-A: Převede všechny soubory v adresáři na soubory určené větve nebo značky (není-li určena, použije hlavní větev (viz dále). Je vhodná zvláště pro složitější projekty, kde různé verze mají různou strukturu.

-P: Nevytváří prázdné adresáře (adresáře, které v dané verzi neexistují). Bez této volby vytvoří prázdné adresáře, ve kterých je pouze speciální adresář CVS.

-r: Volí větev nebo značku. Bez této volby bude použita hlavní vývojová větev (HEAD), která existuje vždy.

-D: Volí určité datum. Bez této volby se použije nejnovější verze. Lze kombinovat s označením větve.

Zkratky: co, get

Nyní provedeme vlastní stažení pracovního adresáře. Příkaz bude vypadat asi takto:

cvs checkout glib

Nic nezkazíme, použijeme-li při operaci checkout volby -A a -P. Tedy:

cvs checkout -AP glib

Ti, kteří si nenastaví kompresi do souboru ~/.cvsrc ani repozitář do proměnné CVSROOT, mohou příkaz zadat jako:

cvs -z3 \
 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome \
 checkout -AP glib

(stejné volby platí i pro login, volba -z3 pak i pro ostatní příkazy, a proto je již nebudu opakovat)

Takový příkaz bude skutečně fungovat. Při prozkoumání stažených dat zjistíme, že se jedná o větev pro novou verzi projektu Glib2. Předpokládejme, že chceme stáhnout starší, ale široce používanou větev Glib1.

Máme několik možností:

1) Celý pracovní adresář smazat a nahrát správnou větev (tou je větev označená glib-1–2).

cvs checkout -AP -r glib-1-2 glib

2) Pracovní adresář si ponechat a převést ho na správnou větev. Možná tím ušetříme nějakou kapacitu linky, protože CVS přenáší pouze rozdíly (alespoň v novějších verzích):

cvs checkout -AP -r glib-1-2 glib

3) Použít příkaz update. O něm se dozvíme příště.

Další výhodou CVS oproti tarballům nebo rpm je, že si můžeme z CVS nahrát jediný soubor. Následující příkaz nahraje změnový soubor ChangeLog z větve glib-1–2 aktuální k tomuto okamžiku:

cvs checkout -AP -r glib-1-2 glib/ChangeLog

Tímto známe vše, abychom si dokázali stáhnout libovolná data z CVS. CVS však umí mnohem více. Ale o tom až příště.

Našli jste v článku chybu?

27. 2. 2004 11:29

ret (neregistrovaný)

Je mozne nejak rozbehat CVS pres FTP? Admin serveru o CVS neuvazuje. Nebo nevite nekdo o nejakem free CVS serveru, kde by bylo mozne umistit si projekty, ktere nebudou OpenSource a s moznosti pristupu pres web zaheslovane(.htaccess)?

1. 7. 2003 14:28

Aleq (neregistrovaný)

Potrebuji nutne v CVS vypnout automaticke mergovani, kdyz ja udelam zmenu, na CVS je zmena a jde to automaticky mergnout. Potrebuju to ohlidat manualne, protoze u nestrukturovanyho ASM je to zlo.... Nevite nekdo co s tim?

-Aleq



DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

Měšec.cz: Exekuční poradna: ptejte se online

Exekuční poradna: ptejte se online

DigiZone.cz: V Plzni odstartovalo Radio 1

V Plzni odstartovalo Radio 1

Lupa.cz: Levný tarif pro Brno nebude, je to kartel

Levný tarif pro Brno nebude, je to kartel

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Test na HIV je zdarma i za pět set

Test na HIV je zdarma i za pět set

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Jak vybrat ořechy do cukroví a kde mají levné

Jak vybrat ořechy do cukroví a kde mají levné

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA