Úvod

Co je to Subversion?

Zcela vlastními slovy bych pro znalé řekl, že je to nástroj, který nahradil CVS. Pro ty, kterým tato věta nic neříká je určen další odstavec.

Subversion je nástroj ze skupiny SCM (správa obsahu zrojových kódů - Source Content Management). Nejvíce rozšířený nástroj v minulých letech a částečně i dnes je CVS, který má několik zásadních nevýhod, které donutili CollabNet k tomu, aby se vrhli do vývoje Subversion.

Subversion slouží ke zprávě zdrojových kódů, které jsou napsány v jakémkoliv jazyce jak programovacím tak lidském. Nativně podporuje kódování UTF-8 a proto není problém psát dokumenty anglicky, rusky nebo svahilsky. SVN uchovává vytváři revize, to znamená, že uchovává stav dokumentů z doby, kdy jste dali vykonat příkaz commit, který slouží k odeslání zdrojových dat na server. Můžete si pomocí Subversion spravovat verze textového dokumentu jako je například tato kniha psaná v Docbooku a nebo zdrojové kódy v libovolném programovacím jazyce (třeba i vlastním).

Subversion patří k cetralizovaným SCM systémům jako je CVS, Perforce, Clearcase a další. Existují také distribuované SCM systémy, které nemají klasickou architekturu client/server. Například Bazaar, Mercurial nebo Git. Porovnání a odkazy na jiné SCM najdete na stránkách Better SCM

Historie Subversion

Subversion vznikl officiálně 31. srpna 2001 a verze 1.0 byla k dispozici v roce 2004.

1.1 září 2004 (FSFS)

1.2 květen 2005 (locks)

1.3 prosinec 2005 (svnserve)

1.4 září 2006 (svnsync)

1.5 červen 2008 (merge tracking support)

1.6 březen 2009

Vývoj Subversion neustále pokračuje a přibližuje se jeho kvalita komerčním systémům jako je Perforce nebo Clearcase. V opensource komunitě, ale začíná také získávat popularitu Git, který je narozdíl od Subversion distribuovaný. Git je například používán v komunitě OpenSUSE nebo při vývoji jádra Linuxu.

Jak funguje Subversion

Architekturu subeversion nejlépe znázorňuje obrázek v [SVNBOOK] na straně 22.

SVN architektura

Základní pojmy

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 (working copy)

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.

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.

Doporučená struktura repozitory

Stukturu repozitory lze jen doporučit, obvyklá struktura je:

/project_name
     /trunk
     /tags
     /branches

Sturuktura může samozřejmě obsahovat i další adresáře např. vendors pro kód, třetí strany nezbytný k projektu. Existují samozřejmě další možnosti v literatuře se uvádí např.

/trunk
  /project_1
  /project_2
/tags
  /project_1
  /project_2
/branches
  /project_1
  /project_2