Slyšeli jste někdy o pojmu Subversion, neboli zkráceně SVN? Pod touto zkratkou se skrývá systém pro správu zdrojových kódu projektu. Jeho hlavní účel je umožnit více lidem pracovat na jednom projektu a ukládat změny do tzv. revizí. Tento systém se vyplatí používat i v případě, že na projektu pracujete sami. Za chvíli vysvětlím proč.

Podobných systému existuje více. Pokud se nepletu, nejrozšířenější by měly být CVS (Concurrent Version System) a SVN (Subversion). SVN je novější systém a odstraňuje některé nedostatky CVS.

Jak to funguje?

Nebudu popisovat přesné fungování a principy SVN, ty si v případě zájmu můžete pročíst v jeho dokumentaci. Raději se zaměřím na to, jak se s takovým systémem pracuje.

Základ všeho je repozitář, což je místo, kam se ukládají revize souborů. Pokud někdo chce pracovat na projektu, stáhne si (update) z repozitáře pracovní kopii (working copy) do libovolného adresáře na svém disku. Po dokončení úprav v souboru se potom soubor pošle do repozitáře (commit). Při posílání se zjistí, jestli nedošlo k žádnému konfliktu a pokud je vše v pořádku, v repozitáři se vytvoří nová revize souboru.

Může se stát, že někdo už soubor upravoval před vámi. Pokud udělal jen malé změny, které se týkají jiné části dokumentu než ty Vaše, SVN se pokusí tyto dvě verze spojit (merge). Pokud ale třeba dva lidi upravovali stejné řádky dokumentu, dojde ke konfliktu. Ten se potom musí řešit ručně - stažením nové verze souboru a vložením nových změn do něj.

Krásné na tom je to, že máte krásný přehled o všech verzích souborů. Při posílání můžete k verzi přidat nějaký komentář. Je uvést alespoň krátkou poznámku, čeho se změna týkala. Pokud se později stane se zdrojovými soubory něco špatného a po nových změnách projekt nebude fungovat, není problém se vrátit ke kterékoliv starší revizi.

Právě díky tomu se vyplatí používat SVN i pro jednotlivce. Máte tak přehled o změnách a vždy se můžete vrátit zpátky do předchozího stavu. Dá se bez toho žít, předtím jsem často zdrojáky upravoval tak, že jsem starý kód zakomentoval a nový jsem vložil. Bylo to docela nepraktické, a občas se vymazalo i něco více, než bylo smýšleno. S SVN máte nad změnami naprostou kontrolu, a nemusíte tyhle věci složitě řešit.

Co všechno verzovat?

Nejlepší podporu má verzování textových souborů (zdrojových souborů, dokumentu…), protože můžete vidět změny mezi verzemi a provést porovnání (diff). Není ale problém do repozitáře poslat binární soubory (aplikace, dll knihovny, obrázky, videa…). U binárních souboru ale nečekejte možnost zjistit rozdíl mezi verzemi, to už je nad rámec možností SVN. Proto si myslím, že je to použitelné nejen pro programátory, ale taky i pro grafiky, nebo pro uživatele, kteří píšou hodně textů.

Pokud umístíte repozitář na vzdálený server, získáte tím možnost stáhnutí aktuální verze dokumentu odkudkoliv. Pokud potom přijdete o data, není problém později stáhnout poslední verzi ze serveru a pracovat na projektu dále. Na druhou stranu - pokud dojde ke ztrátě dat na serveru, tak máte pro změnu poslední verzi vy. SVN lze tedy použít i jako takový typ zálohy. I když raději doporučuju zálohovat i normální cestou (zkopírováním celého adresáře někam jinam), a to hlavně u důležitých projektů (na druhou stranu, který projekt není důležitý? :) ).

Zásady, které nemusíte dodržovat

Existuje několik zásad, které sice není nutné dodržovat, nicméně velmi usnadní práci s projektem. Repozitář byste si měli rozdělit na několik složek.

  • trunk - zde bude umístěná hlavní větev projektu, se kterou se vždy pracuje
  • branch - branching znamená izolování změn. Třeba když chcete přidat nějakou featuru, která by mohla ovlivnit celý projekt, uděláte novou branch (větev). Pokud se implementace nové featury povede, můžete tuto větěv sloučit s hlavní větví projektu.
  • tag - svým způsobem se velmi podobá větvím. S tím rozdílem, že tagy slouží k oddělení různých verzí programů. Hlavně tedy nějaké funkční verze (release), určené k nějaké distribuci. Do těchto verzí se už žádné změny neposílají, dále se pracuje s verzí v adresáři trunk.

Složky trunk, branches a tags vytvořte v kořenovém adresáři repozitáře.

Nikdo Vás ale k těmto zásadám nutit nebude, soubory a adresáře projektu si můžete organizovat jakkoliv. Při menších projektech je to v podstatě jedno, při větších projektech ale podobnou organizaci a způsob zprávy verzí oceníte.

Jak na to?

Po přečtení si možná říkáte, že je to moc komplikované a pravděpodobně tuto možnost zavrhnete. Existuje ale úžasný SVN klient, který se plně integruje do průzkumníka ve Windows. Jeho jméno je Tortoise SVN a jeho používání Vás nebude stát ani korunu. Navíc z domovských stránek si také můžete stáhnout českou lokalizaci, takže práce s programem bude ještě snazší.

Práci s programem předvedu na následujícím příkladu: vytvoříme si projekt test-project, do kterého potom vložíme textový soubor file.txt, ve kterém bude napsáno několik řádku textu. Poté si zkusíme projekt z disku odstranit, abychom si ukázali, jak ho potom znovu stáhnout z repozitáře. Nakonec textový soubor upravíme, a do repozitáře odešleme aktuální verzi. Vzhledem k tomu, že bych chtěl touto ukázkou předvést jednoduchost, nebudu zabíhat moc do detailů a vynechám používání složek jako trunk atp.

  1. Někde na disku si vytvořte složku, ve které vytvoříme repozitář. Může to být třeba C:\SVN
  2. Klikněte pravým tlačítkem na složku a zvolte Tortoise SVN > Create repository here (česky by to mělo být Vytvořit zde repozitář).
  3. Můžete si vybrat souborový systém repozitáře. Zde výběr nechám na Vás, já vybírám FSFS.
  4. Nyní si vytvořte složku s názvem test-project kdekoliv na disku. Na tuto složku klikněte pravým tlačítkem a vyberte SVN Checkout (česky SVN získat).V dialogu si v kolonce URL of repository zadáte cestu k vašemu repozitáři. V našem případě je repozitář na C:\SVN, takže cesta bude vypadat takhle: file:///C:/SVN.Checkout directory necháme tak, jak nám to vyplnil Tortoise SVN. Jedná se o složku c:\test-project.

    Dole v dialogu si můžeme zvolit revizi, která se má stáhnout. Vzhledem k tomu, že v projektu nemáme žádné revize, vybereme HEAD revision. HEAD znamená poslední, nejnovější, prostě ta aktuální :)

  5. Další dialog ukazuje průběh stahování dat z repozitáře. Protože v repozitáři nic není, žádné soubory se nestáhnou.
  6. Ve složce test-project vytvořte soubor file.txt a pomocí jakéhokoliv textového editoru do něj něco napište. Třeba jen obyčejné “Ahoj”. Soubor uložte a poté na něj v průzkumníku klepněte pravým tlačítkem a zvolte Tortoise SVN > Add.Soubor jste přidali k projektu, ale zatím jen ve vaší working copy (pracovní kopii), což je obsah složky test-project. Proto klikněte na soubor znovu a zvolte SVN Commit. Objeví se dialog, ve kterém můžete vložit komentář k souboru (neboli ke změně v souboru). Dialog potvrďte a soubor se nahraje do repozitáře.
  7. Nyní si z testovacích důvodu složku test-project odstraníme z disku. Znovu vytvořte složku (třeba s jiným názvem) kdekoliv na disku. Postup je stejný jako předtím - SVN Checkout.
  8. Jak vidíte, soubor máte znovu na disku. Teď si ho zkusíme upravit. Přidáme k němu další text. Velmi velkou výhodou Tortoise SVN je, že díky integraci do systému ukazuje u ikon souborů značky. Červený vykřičník třeba znamená, že v souboru došlo ke změně.
    Klikněte opět pravým tlačítkem a zvolte SVN Commit. Postup je stejný jako při prvním Commitu, můžete připsat komentář a odeslat.

Jak vidíte, není na tom nic složitého. Jediné, co by mohlo vadit je počáteční zakládání projektu. Potom už je práce s Tortoise SVN velmi jednoduchá a intuitivní. Vše se řeší jednoduše přes kontextovou nabídku při kliknutí pravým tlačítkem na soubor. Na konec článku napíšu ještě několik rad:

  • Pokud jste provedli změny a chcete je vrátit zpět, zvolte Tortoise SVN > Update to revision, kde zvolíte číslo revize, na kterou se chcete vrátit
  • Když přidáte, nebo změníte mnoho souborů, můžete je odeslat tak, že kliknete na nadřazenou složku, ve které tyto soubory jsou, a zvolíte SVN Commit.
  • Různé verze souboru můžete snadno porovnat pomocí Tortoise SVN > Diff
  • Můžete si nechat vygenerovat graf, který ukazuje jednotlivé revize a jejich vývoj. Stačí zvolit Tortoise SVN > Revision graph.

Stále vás používání subversion neláká? :)

Další články zde na webu: