
GNU arch
Velmi mnoho softwarových projektů dnes používá nějaký systém správy verzí.
Snad každý vývojář svobodného softwaru se už setkal například s CVS, které
je v této oblasti nejpopulárnější. CVS má své přednosti, ale
i nedostatky. Proto se v poslední podobě objevují pokusy
o vytvoření nových, vylepšených svobodných systémů správy verzí. Jedním
z velmi zajímavých takových systémů je GNU arch.
Co je GNU arch
GNU arch je systém správy verzí souborů, zaměřený na distribuovaný vývoj
svobodných projektů, potenciálně obsahujících mnoho verzí a větví.
Svobodné systémy správy verzí během své existence prodělaly určitý vývoj.
Zprvu se pracovalo s poměrně jednoduchými nástroji poskytujícími
prostředky pro základní verzování jednotlivých souborů a práci s jejich
předchozími verzemi. Typickým představitelem této skupiny systémů správy verzí
je RCS. Systémy tohoto druhu přestaly postačovat v době, kdy díky rozvoji
Internetu na mnohých svobodných projektech začaly pracovat početnější skupiny,
složené z vývojářů nacházejících se v různých koutech světa. Bylo
nutno řešit problém práce více lidí nad jednou skupinou souborů. Velmi úspěšné
bylo v tomto směru CVS, které se stalo velmi populárním nástrojem a
s jehož pomocí je dnes spravována velká většina svobodných projektů. CVS
zejména umožnilo práci více vývojářů nad stejnými soubory praktičtějším
způsobem, než je prosté zamykání souborů na dobu jejich editace.
S další expanzí Internetu a přibývajícím množstvím vývojářů
podílejících se na vývoji svobodného softwaru, vzrůstajícím větvením projektů a
při stoupajícím počtu zasílaných záplat přestaly postačovat i schopnosti
CVS. Trvalo však poměrně dlouho, než byl tento problém všeobecně rozpoznán
jako podstatný a reálný a než se začaly objevovat první prakticky použitelné
svobodné systémy, který by mohly nedostatky CVS napravit. Jedním
z nejznámějších důsledků tohoto zpoždění je, že pro vývoj Linuxu bylo
z důvodu nedostupnosti dostatečně sofistikovaného svobodného systému
správy verzí vybráno proprietární řešení s problematickou licencí.
Arch je jedním ze svobodných systémů, které se snaží CVS nahradit a být
dostatečně silným prostředkem, uzpůsobeným současným podmínkám vývoje
svobodného softwaru. Je zaměřen přímo na distribuovaný vývoj, do kterého se
může zapojit kdokoliv a kdekoliv. Nenavazuje na CVS ani na jiný systém správy
verzí, jedná se o zcela nový systém s vlastní koncepcí.
Vlastnosti archu
Základní funkce
Za jeden z málo viditelných, ale důležitých konceptů archu lze
považovat princip, že primární úlohou systému správy verzí není správa
snapshotů verzí, nýbrž správa změn mezi
verzemi. Nejzákladnější funkcí systému je tedy práce se změnami. První
konkrétní funkcí, na kterou v tomto směru narazíme, je možnost vložení
(commit) nové verze adresářového stromu do archívu projektu, spolu
s patřičným logem.
Při provedení změny v softwarovém projektu bývá často modifikováno
několik souborů, případně jsou i vytvořeny nové nebo naopak smazány již
nepotřebné soubory a adresáře. Vložení nové verze je v archu operace
atomická, je provedena najednou jako celek. Nedochází tedy k samostatnému
verzování jednotlivých souborů jako v případě CVS. Zatímco CVS svádí
k ukládání změn jednotlivých souborů nebo k večerním až nočním
vkládáním výsledků celodenní práce, arch je orientován na ukládání jednotlivých
změn. Provedete-li jednu zcela konkrétní změnu v programu jako je oprava
jedné chyby nebo přidání jednoho nového rysu programu, je v archu
přirozené vložit jako novou verzi přesně tuto jednu změnu. Mezi pozitivní
přínosy takového přístupu ke správě verzí patří možnost snadné nápravy
nepatřičných změn a hlavně snadná integrace konkrétních změn do jiných větví
projektu.
Díky tomu, že arch do archívu nevkládá verze souborů, nýbrž změny,
nevznikají zásadní potíže s mazáním adresářů a přejmenováváním jakýchkoliv
souborů. S tím má notoricky známé problémy souborově orientované CVS,
přičemž se v tomto případě jedná o nedostatek koncepční, nikoliv
implementační, a tudíž obtížně odstranitelný. Arch tyto potíže nemá a
kromě toho si hladce poradí i se symbolickými linky a přístupovými právy
souborů.
Přidávání, mazání a přejmenovávání souborů lze v archu provádět vícero
metodami, dle konfigurace stromu daného projektu. Máte na výběr mezi
explicitním přidáváním, přejmenováváním a mazáním souborů archívu, nebo mezi
jejich automatickým přidáváním a mazáním (v závislosti na jménu souboru),
nebo mezi uváděním speciálních identifikátorů přímo v souborech, kde tyto
umožňují automatické přidávání, přejmenovávání a mazání bez rizika nechtěně
provedené akce.
Arch rozlišuje mezi několika typy souborů, jako jsou například zdrojové
soubory, soubory, které má ignorovat, nebo soubory, které může sám mazat. Je
to vlastně rozšíření mechanismu známého jako .cvsignore z CVS a využívá se
kromě jiného pro výše uvedené automatické přidávání a odebírání souborů a při
kontrolách obsahu zdrojového stromu.
Samozřejmostí jsou pak běžné funkce nad archívem jako je výpis seznamu verzí
v archívu, informace o změnách v nich, možnost jejich vytažení a
automatické spouštění akcí při změnách archívu.
Distribuované archívy
Jednou z nejsilnějších vlastností archu jsou distribuované archívy.
Součástí každého identifikátoru archívu je e-mailová adresa. Každý vývojář
určitého projektu tak může mít vlastní verzi archívu bez rizika nechtěného
konfliktu jména se jménem jiného archívu a každý identifikátor archívu je
jednoznačný. Přidáme-li k tomu další důležitou vlastnost, kterou je
snadné větvení bez nutnosti kopírování celého archívu, lze snadno realizovat
systém práce, kdy každý vývojář pracuje nad jedním nebo více vlastními archívy
anebo větvemi projektu a koordinátor projektu pak vybrané verze vkládá do
hlavního stromu projektu. Klasický model s jediným archívem to samozřejmě
nevylučuje, lze jej používat také.
Máme-li už distribuované archívy, je vhodné je mít co nejsnáze přístupné.
Arch je v tomto směru poměrně flexibilní, zejména opět v porovnání
s některými jinými systémy správy verzí. Archívy archu je možné kromě
lokálního přístupu zpřístupnit i prostřednictvím FTP, sftp, WebDAVu nebo
prostého HTTP. Chcete-li tedy své archívy vystavit pro čtení, stačí je umístit
na své WWW stránky. Nejste tak kromě jiného na straně serveru ani klienta
závislí na žádných zvláštních funkcích nabízených nebo nenabízených vaším
poskytovatelem připojení k Internetu, což opět odpovídá duchu vývoje
svobodného softwaru.
Se zpřístupněním archívu souvisí i možnost vytváření tzv. knihoven
verzí (revision libraries). To jsou adresářové stromy obsahující všechny větve
a verze projektu. Využít je lze jednak pro urychlení některých operací,
nejtypičtěji asi vytažení konkrétní verze z archívu, a jednak pro
snadné zpřístupnění všech verzí pro prohlížení, není tak kupříkladu opět žádným
velkým problém vše vystavit přímo na Webu. Arch přitom v knihovnách verzí
používá hard linky, takže nedochází k neúnosnému plýtvání diskovým
prostorem.
Archívy je též možno zrcadlit, a to oběma směry -- stáhnout si dostupný
archív k sobě, i vystavit vlastní archív na jiném stroji. Druhá
funkce je velmi užitečná, pracujete-li na stroji, který není (permanentně)
připojen k Internetu. Můžete během práce do svého archívu normálně
vkládat nové verze i při nedostupném internetovém připojení a
v okamžiku připojení k Internetu je ozrcadlit do veřejného prostoru,
například na své webové stránky.
K dispozici je též cachování, pokud nestojíte o neustále
sestavování stromů a stahování dat. Cachování je mechanismus odlišný od výše
zmíněných knihoven verzí i zrcadlení. Zatímco knihovny verzí obsahují
obrazy adresářových stromů jednotlivých verzí projektu s doplňujícími
informacemi a zrcadlení stahuje celé části archívů, cache obsahuje ve vhodné
podobě data nutná pro provedené operace.
A nakonec potěší skutečnost, že soubory v archívu jsou gzipovány,
takže se není třeba obávat zbytečné zátěže síťových linek.
Spojování změn
Aby vše výše uvedené fungovalo, je nutné, aby při správě verzí bylo možno
vzájemně spojovat (merge) velerůzné verze.
Prvním potřebným nástrojem je aktualizace současného zdrojového stromu vůči
archívu, tj. zařazení změn z archívu do stromu, provedených od poslední
aktualizace stromu. Arch dává na výběr mezi aplikací změn provedených ve
stromu od poslední aktualizace stromu na strom odpovídající aktuální verzi
archívu (aplikace celkové změny stromu na archív) a mezi postupným provedením
jednotlivých (všech nebo jen explicitně zadaných) změn z archívu na strom
od jeho poslední aktualizace (aplikace jednotlivých změn archívu na strom).
Druhou funkci lze využít i pro zařazení pouze vybraných změn z jiné
větvě projektu.
Druhým potřebným nástrojem je synchronizace prolínajících se větví projektu.
Při vzájemné nepravidelné synchronizaci různých větví je aktualizace
komplikovanější, neboť je nutná určitá opatrnost při postupné aplikaci změn,
aby nedocházelo ke zbytečným konfliktům. Arch poskytuje prostředek pro
automatické řešení takových situací, tzv. star-merge.
Spolupráce s CVS
Spolupráce archu s CVS je v závislosti na stylu práce více či méně
komplikovaná. Oba systémy jsou příliš odlišné, a proto je obvykle
nejlepší v případě potřeby na arch přejít kompletně. Nicméně je možné
vytvářet jakási archová zrcadla CVS archívu a k nim pak již normálně
vytvářet archové větve.
Hlubší zájemce o problematiku spolupráce archu s CVS lze odkázat
na příslušné Wiki.
Jak se arch používá
Nebudeme čtenáře unavovat zbytečným opisováním instalačního návodu a
přejdeme raději rovnou k věci. Uvedeme si jednoduchý příklad založení
nového archívu a vložení nového projektu do něj. Budete-li chtít arch začít
používat, rozhodně si přečtěte jeho tutoriál.
Aktuální verze GNU archu je distribuovaná pod názvem tla
(existuje i odštěpená verze nazvaná ArX). Můžete si nainstalovat
příslušný balík ze své oblíbené distribuce nebo si jej sami stáhnout a
zkompilovat. Tak získáte program tla.
Program tla obsahuje sadu mnoha příkazů, které se zadávají jako
první argument. Nejdůležitějším příkazem je help
$ tla help
který vypíše seznam všech příkazů. Ke každému příkazu pak lze použít volbu
-H, která vypíše kompletní popis příkazu, nebo volbu
-h, která vypíše jen seznam voleb příkazové řádky příkazu bez
doplňujícího popisu celého příkazu. Například:
$ tla commit -H
Chcete-li si založit tla archív, musíte typicky provést následující
kroky:
$ tla make-archive adresa@nějaká.doména--archive-name /some/directory
$ tla make-category adresa@nějaká.doména--archive-name/test
$ tla make-branch adresa@nějaká.doména--archive-name/test--mainline
$ tla make-version adresa@nějaká.doména--archive-name/test--mainline--0.1
Vytvoření aspoň jedné kategorie, její větve a verze je povinné. Příslušné
tři kroky lze také provést jediným příkazem
$ tla archive-setup adresa@nějaká.doména--archive-name/test--mainline--0.1
Nyní si můžete založit zdrojový strom (nebo použít již existující) a
importovat ho do archívu:
$ mkdir /source/tree
$ cd /source/tree
$ tla init-tree adresa@nějaká.doména--archive-name/test--mainline--0.1
$ tla import
A nakonec provést nějakou změnu a její commit:
$ touch foo.c
$ tla add-id foo.c
$ emacs $(tla make-log)
$ tla commit
Trocha historie
Arch je zajímavý i z hlediska své historie. Dlouhou dobu byl
vyvíjen víceméně jako one-man-show svého autora Thomase Lorda. Původně měl
podobu shellových skriptů, které správu verzí prováděly spojováním funkcí
různých programů. Jednalo se o prototypové řešení, které mělo umožnit
zaměřit se zpočátku především na koncepci systému spíše než na jeho
implementaci.
Prototypový shellový přístup, s důrazem na definici funkcionality a
teprve následnou optimalizaci, narážel u některých lidí na nepochopení.
Navíc autor programu přišel o zaměstnání, dostal se do existenčních potíží
a vývoj archu na čas uvázl. Uživatelé nebo možná tehdy spíše experimentátoři
archu se potýkali s neopravovanými chybami archu a jeho pomalostí. Jedním
z důsledků této situace bylo odštěpení větve projektu pod názvem ArX.
Tomu Lordovi se však časem podařilo vývoj archu oživit. Úspěšně jej přepsal
do jazyka C a vznikla již dobře použitelná verze 1.0, distribuovaná pod názvem
tla. Arch má dnes charakter plnohodnotného systému správy verzí, do kterého se
implementují pokročilé rysy jako kontroly integrity archívu a na kterém
spolupracuje několik vývojářů. Arch je nyní bezpochyby kvalitním systémem
správy verzí, směřujícím k tomu, aby se stal plnohodnotnou náhradou nejen
CVS, nýbrž i pokročilých proprietárních řešení.
Relativní úspěch archu však nic nezměnil na situaci Toma Lorda. Vývoj archu
byl úspěšný jen díky jeho tvrdohlavosti, se kterou na tomto velmi zajímavém
softwaru naplno pracoval a pracuje i ve složité osobní situaci, kdy je bez
peněz a má dluhy. Arch totiž není pro softwarové firmy dostatečně zajímavý na
to, aby jeho vývoj finančně podpořili nebo aby jeho autora zaměstnali. Takže
Tom Lord zatím přežívá jen díky dobrovolným příspěvkům řadových uživatelů svého
systému.
Zhodnocení archu
Arch je velmi zajímavý systém správy verzí a kdo má rád inovativní,
principiálně jednoduché a přitom mocné softwarové prostředky, snadno si jej
oblíbí. Arch je svobodný nejen svojí licencí, nýbrž i koncepcí umožňující
velmi snadné zapojení se do kteréhokoliv archem spravovaného projektu.
Přechod z CVS není úplně snadný, nikoliv však kvůli komplikovanosti
archu, nýbrž proto, že je potřeba se zbavit určitých návyků až zlozvyků
z práce s CVS. Jakmile k tomuto mentálnímu odblokování dojde,
stává se práce s Archem velmi přirozená a snadná.
Současná implementace tla je plně prakticky použitelná a kromě oprav
občasných chyb dochází k přidávání dalších zajímavých rysů, kromě jiného
i s ohledem na konkurenční systémy. Osobně necítím potřebu nadále
používat CVS z jiného důvodu, než je kompatibilita s jinými vývojáři
nebo projekty. Co naopak v archu postrádám, je možnost kompletního
zrušení posledního vložení verze. Pokud například do archívu omylem vložíte
nějaký veliký soubor a nechcete jej tam mít v podobě zaznamenané verze uložen
navždy, nezbývá vám, než se s dostatečnou míru opatrnosti povrtat
v adresářovém stromu archívu.
Arch není jediný systém svého druhu. Asi nejznámějším pokusem
o náhradu CVS je Subversion, který je svojí koncepcí CVS poměrně blízký.
Máte-li zkušenosti s kterýmikoliv takovými systémy, můžete je uvést
v komentáři ke článku nebo o nich nějaké články napsat.
Odkazy
|