Apache Subversion

Apache Subversion (dříve Subversion – zkráceně SVN) je systém pro správu a verzování zdrojových kódů, náhrada za starší CVS. Snaží se zachovat podobný způsob a styl práce, ale odstranit nedostatky CVS jako například nemožnost přesunu nebo kopírování adresářů, časová a prostorová náročnost větvení a tagování a podobně.

Jednou z výhod systému Subversion je existence velmi dobré dokumentace (zatím v angličtině) – nazývá se Version Control with Subversion a je volně dostupná (viz odkazy). Další je existence více přístupových metod k repozitáři. Subversion je, tak jako CVS, založeno na principu centrálního repozitáře.

Popis nástroje Subversion 
Subversion patří do kategorie version control nástrojů a uspokojuje základní potřeby při správě verzí.
Je vyvíjen firmou CollabNet, Inc. a je šířen pod licencí, která umožňuje jeho bezplatné komerční použití, k dispozici jsou zdrojové kódy.

Důvodem jeho vzniku je snaha o nahrazení jiného velmi používaného systému, zvláště ve světě open source, CVS. Zčásti je Subversion systémem CVS inspirován, bere si z něj některé jeho vlastnosti, je však mnohem flexibilnější a jeho používání je snazší.

Lze ho provozovat na mnoha platformách, včetně Windows.

Skládá se ze dvou hlavních částí – klientská část a serverová.

Klientská část poskytuje nástroje pro práci s verzemi přímo v pracovním adresáři a komunikaci se serverovou částí, která se stará o repository (centrální úložiště).

K repository lze přistupovat různými způsoby (lokálně, přes nativní protokol svn://, DAV). Existuje několik klientských nástrojů, od příkazového řádku, přes webové rozhraní až po nástroje integrované do GUI operačního systému. Záleží na tom, co kterému uživateli vyhovuje nejvíce.

Základní pojmy a postupy 
Repository (repozitář, centrální úložiště)
Umožňuje organizovat projekt a spravovat jeho verze. Fyzicky je uloženo na souborovém systému serveru. K repository se přistupuje přes Repository Access Layer (RA) systému Subversion a jeho správa se provádí klientskými nástroji.

Branch (větev)
Slouží k organizaci repository, jedná se o jakousi analogii s adresáři. Pokud se z repository vyzvedne větev, na klientovi vznikne adresářová struktura, která přesně odpovídá větvím v repository.

Revision (revize)
Revize je pořadové číslo každé změny. Slouží ke sledování změn ve větvích v čase. Každá změna v nějaké větvi vytvoří novou revizi v rámci celé repository. Revize obsahuje informace o tom, co bylo změněno, kdo změnu provedl, poznámku a čas.

Pracovní kopie
Kopie dat z určité větve z repository v aktuální revizi na pevný disk lokálního klienta. Do pracovní kopie je možné provádět změny, které je možné commitem uložit zpět do repository.

Commit
Odeslání změn provedených od posledního commitu do repository. Commit je nejčastěji používaná změna při práci s repository. Pokud se provádí commit celé pracovní kopie, jedná se o atomickou operaci, jsou odeslány veškeré změny ve všech objektech ve správě verzí; pokud dojde k nějaké chybě při přenosu, není commit pro ostatní uživatele repository zviditelněn, není vytvořena nová revize.

Konflikt
Konflikt je stav, který signalizuje, že stejný objekt, který má být právě commitován, byl změněn někým jiným a nachází se v repository v aktuální revizi v jiné podobě, než jaký je v pracovní kopii. Nelze provést commit celé pracovní kopie, pokud se v ní nachází jeden nebo více souboru v konfliktu.

Changeset
Changeset je sada změn, které se posílají z pracovní kopie do repository (nebo sada změn provedená v rámci repository). Subversion ukládá vždy jen informace o provedených změnách, tedy rozdíly mezi jednotlivými revizemi. Tím se spoří místo na disku a snižuje objem dat přenášených z klienta na server.

Merge
Sloučení změn z větve v repository do pracovní kopie. Lze specifikovat určitý rozsah změn, a to intervalem revizí.

Cheap-copy
Technika, kterou se realizují kopie prováděné v rámci repository. Objekty nejsou v repository fyzicky duplikovány, ale jsou vytvořeny tzv. odkazy (link) na kopírované objekty. Zjednodušeně lze chápat takovýto link jako informaci o URL s číslem revize. Díky tomu má SVN nízké nároky na datový prostor.

Správa verzí pomocí Subversion 
Následuje příklad, jak probíhá správa verzí pomocí SVN. Předpokládejme, že je již v repository importovaný projekt, jedná se o zjednodušený proces, kdy požadavky jsou vyvíjeny za sebou, nikoliv paralelně.

 Vyzvednutí projektu (tzv. checkout) z repository do lokálního adresáře. Tím se vytváří pracovní kopie, která funguje jako pracovní prostor.
 Editace požadovaných souborů (přidání, mazání).
 Odeslání změn do repository (tzv. commit). Změny jsou viditelné pro všechny uživatele repository. Spolu se změnami se zapisuje čas jejich poslání do repository, autor a textový komentář. Další vývojář může pokračovat v práci.
 Další vývojář (pokud již má pracovní prostor) provede stažení aktuální verze z repository (tzv. update) a pokračuje ve vývoji. Vytvořené změny opět odešle do repository (tzv. commit).

Organizace repository 
Z mnoha důvodu je třeba repository vhodným způsobem organizovat, pro organizování repository slouží větve. Vzhledem ke flexibilitě, kterou poskytuje díky konceptu cheap-copy, umožňuje Subversion měnit repository v souladu s aktuálně se měnícími požadavky.

Existuje několik osvědčených způsobů, jak repository v Subversion organizovat, záleží vždy na způsobu, jakým se daný projekt vyvíjí.

Související články 
 Verzování
 Git

Reference

Externí odkazy 
 
 subversion.apache.org – Domovská stránka projektu Subversion, dříve subversion.tigris.org
 svnbook.red-bean.com – Domovská stránka knihy Version Control with Subversion.
 better-scm.berlios.de – iniciativa pro lepší SCM, přehled alternativ k CVS.
 tortoisesvn.tigris.org – Subversion klient pro Microsoft Windows (integrovaný i do průzkumníka)
 kdesvn.alwins-world.de – Subversion klient pro KDE
 subclipse.tigris.org – Subversion plugin pro Eclipse

 linuxsoft.cz – Seriál o Subversion na linuxsoft.cz (poskytující dostatečný úvod do problematiky)

Systémy pro správu verzí
Svobodný software v C
Software pod licencí Apache