Subversion – pomocník pro Vaše projekty

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á? 🙂

Příspěvek byl publikován v rubrice Software. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

27 komentářů: Subversion – pomocník pro Vaše projekty

  1. simon napsal:

    Zdravim, pekny uvod do SVN. V unas vsak SVN neni tolik rozsirene. Moc hostingovych poskytovatelu jej nenabizi. patram nyni po hostovani SVN (protoze na localu to fakt nema smysl, chci hlavne mit zalohu) a nasel jsem akorat zahranicni. Klidne bych si i zaplatil ale neminim si kupovat domenu a platit hosting. Nemas nejaky zkusenosti?

  2. David napsal:

    Ahoj, díky za komentář. Abych řekl pravdu tak žádnou takovou službu neznám. Google mi sice na dotaz „svn hosting“ nabídl celkem dost výsledků, ale s žádnou nemám zkušenosti.

    Napadá mě ale, jestli by nebylo možné použít k těmto účelům sourceforge.net nebo Google Code? Napadá mě, že bych to mohl někdy v budoucnu vyzkoušet. Ale asi až začnu na něčem „větším“ dělat 🙂

  3. simon napsal:

    Aha, takze si do toho jeste nepronikl. Uz jsem nejaky sluzby vyzousel, mozna o tom napisu clanek.
    Sourceforget je spis pro opensource, stejne jako google code. googlecode je podle mne lepsi (mam tam jeden opensource projekt), ale repozitar si muzes zobrazit v prohlizeci, coz ja nechci. u komercnich projektu nechci aby nekdo videl moje zdrojaky.
    zatim nejlepe vypada https://opensvn.csie.org/ (nedavno jim ale vypadl server, docela se bojim tam dat skripty) a assembla (bohuzel muzes reposity zobrazit pres prohlizec, presne to co nechci, ale jinak opravdu super moznosti)

  4. David napsal:

    Pro doplnění: našel jsem zajímavý článek o hostovaném svn: http://www.czechdesign.cz/blogs/aichi/hostovani-projektu

  5. simon napsal:

    jj četl jsem. Vcelku mi nic novyho nerekl.

  6. David napsal:

    Vidím že jsi byl rychlejší. No pokud bych chtěl posílat nějaký důležitý projekt tak určitě ne na nějaký free hosting. Problém bude sehnat něco českého.

    Když se tak dívám, tak třeba banan.cz nabízí hosting s podporou subversion. Vím že si říkal že bys takový hosting nechtěl platit, ale možná bych zkusil kontaktovat správce některých webhostingů. Třeba by mohli nabídnout speciální hosting, na kterém by běželo jen svn, takže by to vyšlo levněji.

    Samostatný český hosting svn jsem zatím ještě nenašel.

  7. David napsal:

    Právě jsem našel návod, jak provozovat SVN na FTP serveru. Takže by stačil nějaký klasický webhosting 🙂 Mrkni na tohle:
    http://www.ebswift.com/Wiki/wikka.php?wakka=SubversionFTP

  8. carnero napsal:

    Zajímavá debata, nikdy mě nenapadlo, chtít od hostingu SVNku. Vždycky jsem bral jako samozřejmost, že si SVN nainstaluji na svůj počítač, tam jí budu spravovat, používat a na server to pouze nainstaluji, nebo zkopíruji. Už jen proto aby tam nebyly systémové věci SVN a také proto abych s SVN mohl pracovat i když zrovna jsem offline (z nějakého důvodu občas spadne net nebo jsem v místě, kde není net). A také mám lepší kontrolu nad tím, kdo k tomu má přístup. Ale nápad mít SVN na hostingu není zlý… fakt mě to nikdy nenapadlo a to na svn commit/update provádím asi tisíckrát denně.

  9. David napsal:

    Taky mě to nikdy nenapadlo, až do včerejška, kdy se na to simon zeptal 🙂 Ale pokud na projektu pracuje více lidí, je to skoro nutnost. Já ale většinou pracuju na projektu sám, takže je pro mě nejlepší řešení mít to lokálně na počítači.

  10. simon napsal:

    Ikdyz pracujes na projektu sam, neni dobre ho mit na localu. Tahle jsem to mel taky, nedavno mi znicehonic odesel disk. A co ted? Proto se shanim po jinem reseni.

    BTW rozchodil jsem to reseni s ftp. Zatim to testuju jak se to chova v IDE (zend studio, easy eclipse, eclipse pdt), dam vedet az to nejak sepisu.

  11. David napsal:

    No vzhledem k tomu, že si data zálohuju pravidelně na extérní disk, tak se ztráty moc nebojím 🙂 Každé řešení má ale své výhody a nevýhody a každému vyhovuje něco jiného.

    Pokud si to rozchodil tak je to super zpráva. Teď ještě doufat, že to bude fungovat bez problémů 🙂

  12. simon napsal:

    Ja jsem linej:D priznam se bez muceni. Mas pravdu ze je potreba vytvorit si vlastni individualni reseni. Ja pracuju jedine na notebooku, dost casto cestuji. tahat externi disk je pro me opruz. proto jsem chtel skloubit svn a zalohu dohromady. funguje mi to a jsem spokojenej

    to ftp nema chybu, jede to jak ma. jeste to zkusim rozchodit pod linuxem. ale jinak vrele doporucuji. je to asi nejlepsi reseni jake je mozne. je to levne a jednoduche. jsem nastvany ze me to nenapadlo driv:D

  13. carnero napsal:

    David: Máš pravdu, že na projekty s více vývojáři je třeba jiný stroj než local. Ale na to mám firemní SVN servery, na soukromých projektech dělám jen já sám.

    Co se týče havárie disku… sem tam záloha na externí není od věci a nemusí být třikrát denně. Stačí myslím vždycky o víkendu, připojit doma disk, zkopírovat a zase jít. Není to nijak složité, zvlášť když člověk je líný a udělá si nějaký skript, který zkopíruje jen to potřebné na jedno kliknutí.

  14. David napsal:

    Simon: Paráda, až budu potřebovat mít SVNku někde na serveru, tak použiju můj stávající hosting 🙂

    Carnero: k zálohování používám Cobian Backup, a myslím že jednodušeji už to snad ani nejde 🙂 O nic se nemusím starat, jen občas zkontroluju, jestli je všechno v pořádku. Když nezálohuju, tak mám takový divný pocit, že se něco stane 😀 To zná asi každý, komu se už nějaké ty data ztratila 🙂

  15. carnero napsal:

    David: Mým oblíbeným zálohovacím nástrojem je F5 😀 Jsem líný psát si skript na zálohování a řešit to programem (když to může pořešit skript) mi přijde jako klasický kanón na komára.

  16. David napsal:

    No jo, ale tak u toho programu je výhoda, že se stará nejen o samotný proces zálohování, ale taky o to, kdy to bude zálohovat. Nemusím pořád myslet na to, kdy mám co zálohovat. Vše jsem nastavil někdy dávno a už to neřeším, občas si všimnu, jak se začne zálohovat, ale nemusím na to myslet.

    Teda až na zálohu webu, tam to dělám pořád ručně, protože jsem nenašel lepší způsob, jak zálohovat automaticky databázi a celý obsah FTP (ftp by myslím nebyl problém, ale databáze asi jo)

  17. berushka napsal:

    webhosting který nabízí i subversion je např. savana.cz.

  18. dadajax napsal:

    Berushka: díky za upozornění. Super je, že to nabízí i u toho nejlevnějšího tarifu 🙂

  19. tom napsal:

    pěkný článek 🙂

  20. Racky napsal:

    Ahoj. SVN mě zajímá, ale moc to zatim nechápu. TortoiseSVN je jen prográmek pro ovládání SVN serveru, žejo.. Takže kromě TortoiseSVN musím ještě nainstalovat tu serverovou část? Chtěl bych to v práci zkusit rozchodit na serveru tak, abysme mohli sdílet kód mezi více lidmi, ale nějak nejsem schopen si utřídit pojmy.. Poradí někdo?

  21. dadajax napsal:

    Racky: on ten SVN server vůbec nemusí existovat. Třeba TortoiseSVN dokáže pracovat nad repository, které je v podobě jednoho adresáře na disku. Takže místo serveru slouží jen jeden adresář, kde jsou všechny soubory a změny uchovány.

    Pro Windows se dá snadno rozchodit SVN server například pomocí http://www.visualsvn.com/server/

  22. Racky napsal:

    dadajax: Aha aha.. Takže mi stačí si na svém počítači nainstalovat TortoiseSVN a potom přes okolní počítače najet na složku na serveru a nastavit ji jako repozitář? A všichni kolegové ho pak už budou most používat opět pomocí TortoiseSVN?
    A má nějakou výhodu instalovat ten VisualSVN, když ho vlastně nepotřebuju?
    (Dodávám, že se všechno odehrává v mém případě pod Windows)

  23. dadajax napsal:

    Výhody snad jen v nastavování přístupů, jinak myslím že stačí ta sdílená složka. Rozdíly by tam být neměly.

  24. Petin napsal:

    Používám DropBox a udělal jsem si úložiště na něm, zdá se, že to funguje jak má… Mám to tím pádem zálohované a navíc přístupné odkudkoliv a zadarmo ;o)).

  25. dadajax napsal:

    Petin: to je výborný nápad. Při psaní článku jsem o dropboxu nevěděl ale teď kdybych něco takového potřeboval, určitě bych toho využil 🙂

  26. Jan Kašpar napsal:

    super clanek diky

    zelvi svn pouzivam lokalne, ale prave jsem narazil na problem ze jsem s kolegou delal na jednom projektu a nejak se obcas nezadarilo

    ted uz mam jasno a pojede se systemove ne pres F5 😀

  27. Denis napsal:

    Ahojky, chci nyni ted pridat plugin na wordpress.org. Vim, ze tento navod je tomu podobny, ale jsem trochu blbej na toto. Muzes mi s tim prosim nejak poradit a udelat navod?

    Diky 🙂

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.