Správa verzí
Co je to správa verzí? Proč by vás to vůbec mělo zajímat? Správa verzí je systém, který zaznamenává změny souborů v čase tak, že se v případě potřeby můžeme vrátit k některé z předchozích verzí. Pro příklady v této knize použijeme zdrojový kód softwaru jako ony spravované soubory, ale samozřejmě to není nutné – můžete spravovat v podstatě jakýkoli druh souborů.
Pokud jste grafik nebo web-designer a chcete si schovat každou verzi obrázku nebo rozvržení stránky (což zcela jistě budete chtít), je velmi moudré rozhodnutí použít systém pro správu verzí (SSV).1 Umožňuje vám vrátit jednotlivé soubory nebo celý projekt do nějakého z předchozích stavů, porovnávat změny, vidět, kdo naposledy změnil soubor, ve kterém se objevil nějaký problém, kdo napsal chybový kód a mnohé další … Používat SSV také obecně znamená, že pokud něco zkazíte nebo přijdete o nějaké soubory, můžete se jed-no-du-še vrátit. Navíc s minimálními režijními náklady.
Místní systémy správy verzí
Mnoha lidmi používaná metoda je prosté kopírování souborů na jiné místo, občas označené např. datem, pokud jsou chytřejší. Tento přístup je oblíbený pro svoji jednoduchost, ale je neskutečně chybový. Je tak jednoduché zapomenout, ve kterém adresáři se zrovna nacházíte, a omylem zapsat do špatného souboru nebo chybně kopírovat.
Kdysi dávno právě z těchto důvodů vznikly místní SSV, které v jednoduché databázi udržovaly všechny změny spravovaných souborů (obr. 1-1).

Obrázek 1-1. Místní SSV
Jeden z populárnějších SSV byl program rcs, který je stále ještě dodáván i s mnoha dnešními počítači. Zvláště populární operační systém Mac OS X obsahuje příkaz rcs, když instalujete Developer Tools. Funguje v podstatě na principu uchovávání patchů mezi jednotlivými změnami ve speciálním formátu na disku, takže může obnovit jakýkoli bod v minulosti aplikováním všech těchto patchů v sérii.
Centralizované systémy správy verzí
Další požadavek na SSV je, aby umožnil spolupráci více vývojářů z různých koutů světa. Proto byly vytvořeny centralizované systémy správy verzí (CSSV). Tyto systémy, jako např. CVS, Subversion nebo Perforce, mají vždy jeden server, který obsahuje všechny spravované soubory ve všech verzích, a množství klientů, již stahují soubory z tohoto jednoho centrálního místa. Po mnoho let byl toto standard ve správě verzí (obr. 1-2).

Obrázek 1-2. Centralizovaný SSV
Toto uspořádání přináší mnoho výhod, zvláště proti místním SSV. Třeba všichni ví do jisté míry, kdo další se ještě na projektu podílí. Administrátoři mají přesnou kontrolu nad tím, kdo co dělá – je to daleko jednodušší než spravovat místní databáze u každého klienta zvlášť.
Samozřejmě to má i vážná úskalí. Nejviditelnější je asi ten jeden jediný bod uprostřed reprezentovaný centralizovaným serverem. Když má server hodinový výpadek, pak samozřejmě behem této hodiny nikdo nepřispěje, nikdo nemůže uložit své provedené změny na projektu, na kterém právě pracuje. Pokud dojde k poruše harddisku centrální databáze a nikdo dostatečně nezálohoval, pak ztratíte absolutně všechno. Kompletní historii projektu kromě nějakých osamělých kopií, které mají uživatelé a vývojáři na svém vlastním počítači. Tím mimochodem trpí i místní SSV – jakmile máte všechno na jednom místě, riskujete, že při neopatrnosti nebo poruše jednoduše přijdete o všechno.
Distribuované systémy správy verzí
Proto nastoupily na scénu distribuované SSV (DSSV). V takovém systému (Git, Mercurial, Bazaar, Darcs apod.) klient neuchovává jen poslední verzi souborů, nýbrž vytváří kompletní duplikát repositáře. Pak pokud nějaký server v těchto podmínkách odejde do počítačového nebe, nic se vlastně nestane. Jakýkoli repositář u klienta je možno nahrát zpět na server a jede se dál. Každý checkout je v podstatě kompletní záloha všech dat (obr. 1-3)

Obrázek 1-3. Distribuovaný SSV
Navíc mnoho těchto systémů umí slušně pracovat s více vzdálenými repositáři najednou, takže můžete spolupracovat s různými skupinami lidí na různých částech téhož projektu. To umožňuje mít různé způsoby organizace práce, které v centralizovaných systémech vůbec nejsou možné, jako je hierarchický model.