Apache Subversion (dříve Subversion[1] – 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.
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.
- 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.
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).
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í.
- linuxsoft.cz – Seriál o Subversion na linuxsoft.cz (poskytující dostatečný úvod do problematiky)
Software pro správu verzí |
|
Rok (pokud je dostupný) udává uvedení první stabilní verze. Systémy, jejichž jména jsou kurzívou, již nejsou udržované nebo bylo oznámeno ukončení vývoje. |
|
Lokální |
| |
|
Client–server |
| Free/open-source | | | Proprietární | |
|
|
Distribuovaný |
| Free/open-source | | | Proprietární | |
|
|
Serverový software | |
|
Koncepty | |
|
*Kategorie |