Subversion

Z FI WIKI
Přejít na: navigace, hledání

Vývojové nástroje: Subversion | Maven2 | NetBeans

Subversion je systém pro řízení verzí. Tento systém spravuje soubory a adresáře nějakého projektu v průběhu času. Systém si udržuje informace o každé změně a umožňuje získat libovolnou starší verzi projektu nebo prozkoumat historii změn. Systém také výrazně usnadňuje týmový vývoj, neboť umožňuje souběžnou práci vývojářů, přičemž hlídá jednotlivé změny, aby nedošlo ke kolizím.

Dokumentaci k systému naleznete v Subversion Book (http://svnbook.red-bean.com/).

Subversion je typ systému řízení verzí s centrálním serverem. Existují i distribuované systémy řízení verzí, např. GNU Arch (http://www.gnu.org/software/gnu-arch/).

Repozitory

Repozitory je centrální úložiště, kde je uložena hierarchie souborů projektu včetně historie všech změn. Je uložena na serveru a mohou k ní přistupovat klienti. Tito klienti mohu data do repozitory ukládat a tím je zpřístupnit ostatním klientů, nebo je mohou číst a získat tak data poskytnutá ostatními klienty.

Problém souběžné modifikace stejných souborů:

  • Řešení typu Lock-Modify-Unlock
  • Řešení typu Copy-Modify-Merge

V systému subversion může být repozitory uložena na vzdáleném serveru a zpřístupněna pomocí rozšíření protokolu webdav (takto to funguje na kore), nebo může být uložena v lokálním adresáři.

Základní příkazy a operace

Založení repozitory

Repozitory se zakládá prostřednictvím příkazu

svnadmin create <cesta_k_repozitory>

Pokud bude repozitory přistupováno prostřednictvím sítě, je nutné ještě nakonfigurovat a zprovoznit modul pro www server apache, což však přesahuje rámec tohoto návodu. Pokud používáte repozitory na serveru kore.fi.muni.cz, tento krok samozřejmě dělat nebudete, protože repozitory již zřídili její správci (Pavel Drášil).

Import projektu

Nyní je nutné do repozitory importovat příslušný projekt. To se provede příkazem

svn import [cesta_k_projektu] <url>

Pokud používáte repozitory na serveru kore.fi.muni.cz a projekt vám byl založen automaticky (např. v rámci předmětových projektů), nic importovat nemusíte, protože kostru projektu již v repozitory máte nachystanou.

Zde je vhodné upozornit, že je dobré dodržet doporučenou adresářovou strukturu projektu, která má tvar

myproject
  branches
  tags
  trunk

V adresáři branches se ukládají jednotlivé vývojové větve, v adresáři tags se ukládají konkrétní verze, které si chceme nějak označit (např. release10 apod.) a v adresáři trunk je pak hlavní vývojová větev.

Pracovní kopie

Pracovní kopie je lokální verze souborů z repozitory. Při práci s projektem používáme a modifikujeme tyto soubory a jejich změny potom hromadně posíláme do repozitory. Pracovní kopii získáme příkazem

svn co <url>

kde <url> je adresa repozitory. Pokud již máme pracovní kopii staženou a chceme pouze stáhnout případné změny, použijeme příkaz

svn update

Pokud v pracovní kopii uděláme nějaké změny a budeme se chtít vrátit k původní verzi, použijeme příkaz

svn revert <soubor>

kde <soubor> je jméno souboru, který chceme vrátit do původního stavu. Chceme-li do projektu přidat další projekt, použijeme příkaz

svn add <soubor>

a pokud jej chceme naopak odebrat, použijeme příkaz

svn delete <soubor>

Odeslání změn

Pokud v pracovní kopii provedeme nějaké změny, můžeme je do repozitory odeslat pomocí příkazu

svn commit -m "<popis zmeny>"

Před odesláním změn je nutné ověřit, že jde nová verze přeložit. Proto doporučuji následující postup:

svn update
maven test
svn commit -m "<popis zmen>"

Chceme-li před odesláním změn vidět, které soubory jsme změnili, použijeme příkaz

svn status

Chceme-li vidět i všechny provedené změny, použijeme příkaz

svn diff

Řešení konfliktů

Pokud dva vývojáři budou modifikovat stejný soubor naráz, dojde k takzvanému konfliktu. Pokud jsou změny na různém místě, subversion tento konflikt vyřeší automaticky.

Pokud jsou však na stejném místě, je nutné nejdříve provést update, pak konflikt vyřešit ručně a poté teprve provést odeslání změn do repozitory.

Další užitečné příkazy

  • svn info - vypíše informace o pracovní kopii
  • svn log - vypíše historii změn
  • svn status - vypíše stav jednotlivých souborů v lokální kopii
  • svn copy - zkopíruje soubor na jiné místo (tzv. lehká kopie)
  • svn move - přesune soubor na jiné místo

Vytváření větví a značek

Pokud chceme vytvořit nějakou vývojovou větev, jednoduše zkopírujeme adresář trunk (příkazem svn copy) jako podadresář adresáře branches. Např:

 svn copy https://kore.fi.muni.cz/repos/fi/tools/2004/trunk \
 https://kore.fi.muni.cz/repos/fi/tools/2004/branches/test1

Pokud chceme nějakou verzi označit, zkopírujeme adresář trunk do adresáře tags. Např.:

 svn copy https://kore.fi.muni.cz/repos/fi/tools/2004/trunk \
 https://kore.fi.muni.cz/repos/fi/tools/2004/tags/ver1.0

Základní zásady

  • Do repozitory ukládáme vždy nějakou ucelenou změnu.
  • Každou změnu smysluplně okomentujeme.
  • Před uložením změny ověříme, že jde nová verze přeložit a že projde všemi testy.
  • Do repozitory ukládáme pouze zdrojové kódy.

Subversion a NetBeans

V NetBeans verze 4.1 a starších je integrována univerzální podpora pro systémy řízení verzí, která mimo jiné podporuje i práci se systémem Subversion (je nutné stáhnout modul, který obsahuje příslušný profil). Nevýhodou tohoto řešení je však absence operací specifických pro Subversion (např. kopírování nebo přejmenování souborů) a jistá těžkopádnost celého řešení.

Od verze 5.0 byla podpora pro systémy řízení verzí zcela přepracována a měla by být uživatelsky mnohem přívětivější a snadněji použitelná. Vývojáři opustili myšlenku univerzálního systému a pro každý systém řízení verzí je příslušný modul vyvinut znovu a nezávisle na ostatních. Bohužel jse však zatím k dispozici pouze podpora pro systém CVS. Pokud chceme používat Subversion, musíme si prostřednictvím centra aktualizací (update center) stáhnout mnoduly s původní podporou pro systémy řízení verzí, kterou známe z NetBeans 4.1.

Podpora pro Subversion se momentálně intenzivně vyvíjí (viz http://subversion.netbeans.org) a měla by být v blízké době k dispozici. Pokud ji chceme používat, můžeme si buď přeložit NetBeans ze zdrojových kódů ([1]), nebo si stáhnout NetBeans 5.5 Beta ([2]) a prostřednictvím centra aktualizací (update center) si stáhnout příslušný modul. V prostředí unixových stanic je na fi k dispozici modul netbeans-5.5b, který podporu pro subversion obsahuje.

V NetBeans verzie 6 je možné využívať Subversion po niekoľkátich dodatočných krokoch. Tie sú popísané na stránke Guided Tour of Subversion for NetBeans IDE 6.x: Setting up Subversion.

Nefunkčné Subversion pod Netbeans na FI

Na unixových staniciach je potrebné zadať cestu "/usr/bin" (bez uvodzoviek). Je možné, že NetBeans si aj po reštarte budú myslieť že Subversion klient (svn) nieje k dispozícii. Toto môže byť spôsobené preklepom v locale nastavení. Toto sa dá zistiť po zadaní nasledovného príkazu do okna emulátoru terminálu (xterm, gnome-console, Konsole):

locale | grep LC_CTYPE

Ak bude výstupom programu reťazec "LC_CTYPE=cs", potom sa jedná o tento problém. Je možné ho opraviť editáciou súboru ".bashrc" v domovskom adresári - nahradiť

export LC_CTYPE=cs CZ

za

export LC_CTYPE=cs_CZ

(namiesto medzery použiť podtržítko).

Subversion a jiná IDE

  • ANKH-SVN - plugin do MS Visual Studia pro práci s SVN repository
  • Subclipse - plugin do Eclipse pro práci s SVN repository, návod

Odkazy ke stažení

Windows

Linux a spol.

  • binární balíčky budou určitě součástí distribuce