Větvení/Značkování

Jednou z funkcí systémů pro správu verzí je schopnost izolovat změny na samostatnou linku vývoje. Tato linka je známá jako větev. Větve jsou často používány k vyzkoušení nových funkcí, aniž byste rušili hlavní vývojovou linii chybami kompilátora a chybami programu. Jakmile je nová funkce dostatečně stabilní, pak vývojová větev je sloučena zpět do hlavní větve (kmen).

Dalším rysem systémů pro správu verzí je možnost označit konkrétní revizi (např. vydanou verzi), takže můžete kdykoliv obnovit některé sestavení či prostředí. Tento proces je znám jako značkování.

Subversion nemá žádné speciální příkazy pro větvení a značkování, místo toho používá takzvané laciné kopie. Laciné kopie jsou podobné pevným odkazům v Unixu, což znamená, že namísto toho, aby tvořili kompletní kopii v úložišti, je vytvořen interní odkaz, odkazující na konkrétní strom/revize. Výsledkem je, že větve a značky jsou velmi rychle vytvořeny a v úložišti nezabírají téměř žádný prostor navíc.

Vytvoření Větve nebo Značky

Pokud jste importovali projekt s doporučenou adresářovou strukturou, vytvoření verze větve nebo značky je velmi jednoduché:

Obrázek 4.54. Dialogové okno Větev/Značka

Dialogové okno Větev/Značka


Vyberte adresář ve Vaší pracovní kopie, který chcete zkopírovat na větev nebo značku, pak vyberte příkaz TortoiseSVNVětev/značka.

Výchozí cílová adresa URL pro novou větev bude zdrojová URL, na nichž je založena vaše pracovní kopie. Budete muset tuto URL upravit na novou cestu vaší větve/značky. Takže místo

    http://svn.collab.net/uloz/JmenoProjektu/kmen

můžete nyní používat něco jako

    http://svn.collab.net/uloz/JmenoProjektu/znacky/Vydani_1.10

Pokud si nemůžete vzpomenout na pojmenování, které jste použili naposledy, klikněte na tlačítko vpravo pro otevření průzkumníka úložiště, takže můžete zobrazit existující strukturu úložiště.

Mezilehlé složky

Když zadáte cílovou URL, všechny složky až po poslední musí pžedtím existovat, nebo obdržíte chybovou zprávu. V příkladu výše musí URL http://svn.collab.net/repos/ProjectName/tags/ existovat, aby byla značka Release_1.10 vytvořena.

Pokud ale chcete vytvořit větev/značku pro URL, která má mezilehlé složky, které zatím nejsou vytvořeny, můžete zaškrtnout možnost Vytvořit mezilehlé složky v dolním okraji dialogového okna. Pokud je tato možnost povolena, všechny mezilehlé složky jsou automaticky vytvořeny.

Nezapomeňte, že tato volba je standardně vypnuta, aby se předešlo překlepům. Například, pokud byste zadali cílovou URL jako http://svn.collab.net/repos/ProjectName/Tags/Release_1.10 místo http://svn.collab.net/repos/ProjectName/tags/Release_1.10, bez této možnosti byste obdrželi chybu, ale s touto možností by složka Tags byla automaticky vytvořena a pak byste měli složky Tags a tags.

Nyní musíte vybrat zdroj kopie. Zde máte tři možnosti:

revize HEAD v úložišti

Nová větev je kopírována přímo v úložišti z revize HEAD. Z vaší pracovní kopie nemusí být převedeny žádné údaje a větev je vytvořena velmi rychle.

Jednoznačná revize v úložišti

Nová větev je kopírována přímo v úložišti, ale můžete si vybrat starší revizi. To je užitečné, pokud jste zapomněli udělat značku, když jste minulý týden vydali svůj projekt. Pokud si nemůžete vzpomenout na číslo revize, klikněte na tlačítko vpravo pro zobrazení záznamu revizi a odtamtud zvolte číslo revize. Opět žádná data nejsou přenášena z Vaší pracovní kopie a větev je vytvořena velmi rychle.

Pracovní kopie

Nová větev je identickou kopii Vaší místní pracovní kopie. Pokud jste aktualizovali některé soubory na starší revizi ve Vaší pracovní kopii, nebo pokud jste provedli místní změny, to je přesně to, co do kopie jde. Přirozeně tento druh složitého značení může zahrnovat přenos dat z Vaší pracovní kopie zpět do úložiště, pokud tam už nejsou.

Pokud chcete, aby Vaše pracovní kopie byla automaticky překlopena na nově vytvořenou větev, zaškrtněte políčko Překlopit pracovní kopie do jiné větve/značky. Ale pokud to uděláte, nejprve se ujistěte, že Vaše pracovní kopie neobsahuje změny. Pokud ano, budou tyto změny sloučeny do větve pracovní kopie při překlopení.

Pokud má Vaše pracovní kopie zahrnuty další projekty pomocí vlastnosti svn:external, budou tyto externí uvedeny vespod dialogového okna větev/značka. Pro každý externí se zobrazí cílová cesta a URL zdroje.

Pokud se chcete ujistit, že nová značka je vždy v soudržném stavu, zkontrolujte všechny externí, jestli jejich revize jsou upevněné. Pokud nezkontrolujete externí a tyto odkazují na HEAD revizi, která by se mohla v budoucnu změnit, získávání nové značky získá tuto externí HEAD revizi a Vaše značka už se nemusí kompilovat. Takže je vždycky dobrý nápad při vytváření značky nastavit externí na jednoznačnou revizi.

Externí jsou automaticky připnuty buď na jejich současnou revizi HEAD nebo na základní revizi pracovní kopie, v závislosti na zdroji větve/značky:

Tabulka 4.1. Připnutá revize

Kopírování zdrojePřipnutá revize
revize HEAD v úložištiRevize HEAD externího úložiště
Určitá revize v úložištiRevize HEAD externího úložiště
Pracovní kopieZákladní revize pracovní kopie externí


externí v externích

Pokud projekt přidaný jako externí, má své vlastní externí, pak tyto nebudou označkovány! Pouze externí, jenž jsou přímo podřazené, mohou být označkovány.

Stiskněte OK pro odevzdání nové kopie do úložiště. Nezapomeňte přidat zprávu záznamu. Všimněte si, že kopie je vytvořena uvnitř úložiště.

Nezapomeňte, že pokud jste se rozhodly překlopit Vaši pracovní kopii do nově vytvořené větve, vytvoření větve nebo značky neovlivní Vaši pracovní kopii. I když vytvoříte větev z pracovní kopie, jsou tyto změny odevzdány do nové větve a ne do kmene, takže Vaše pracovní kopie může být stále označena jako změněná s ohledem na kmen.

Jiné způsoby, jak vytvořit větev nebo značku

Můžete také vytvořit větev nebo značku, bez nutnosti pracovní kopie. Chcete-li to tak, otevřete průzkumníka úložiště. Zde můžete přetáhnout adresáře do nového umístění. Musíte při přetahování držet klávesu Ctrl k vytvoření kopie, jinak je adresář přesunut, nikoli zkopírován.

Můžete také adresář přetáhnout pravým tlačítkem myši. Po uvolnění tlačítka myši si můžete vybrat z kontextového menu, zda chcete složku přesunout nebo zkopírovat. Samozřejmě pro založení větve nebo značky, musíte zkopírovat adresář, ne ho přesunout.

Existuje ještě jiný způsob z dialogového okna záznamu. Můžete zobrazit dialogové okno záznamu např. kmene, výběr revize (buď revizi HEAD na samém vrcholu, nebo starší verze), kliknout pravým tlačítkem myši a zvolit vytvořit větev/značku z revize...

Získat nebo Překlopit...

... Toť je (ani ne) ta otázka. Zatímco získaní stáhne vše od požadované větve v úložišti do Vašeho pracovního adresáře, TortoiseSVNPřeklopit... pouze převede změněná data do Vaší pracovní kopie. Dobré pro zatížení sítě, dobré pro Vaši trpělivost. :-)

Abyste mohli pracovat s čerstvě vytvořenou větví nebo značkou máte několik způsobů, jak toho dosáhnout. Můžete:

  • TortoiseSVNZískat pro čerstvé získání do prázdné složky. Můžete získat do jakékoliv místa na místním disku a můžete vytvořit tolik pracovní kopie z úložiště, jak se Vám líbí.

  • Překlopit aktuální pracovní kopii na nově vytvořenou kopii v úložišti. Opět vyberte adresář nejvyšší úrovně Vašeho projektu a použijte TortoiseSVNPřeklopit ... z kontextového menu.

    V dalším dialogovém okně zadejte adresu URL větve, kterou jste právě vytvořili. Vyberte přepínač Revize Head a klikněte na OK. Vaše pracovní kopie bude překlopena do nové větve/značky.

    Překlopení funguje podobně jako Aktualizace v tom, že nikdy nezahodí Vaše místní změny. Když Překlopíte, veškeré změny, které jste provedli ve Vaší pracovní kopii, které dosud nebyly odevzdány budou sloučeny. Pokud toto nechcete, pak musíte buď odevzdat změny před překlopením, nebo se vrátit Vaší pracovní kopii do již odevzdané revize (typicky HEAD).

  • Pokud chcete pracovat na kmeni a větvi, ale nechcete to na úkor nového získání, můžete použit Průzkumníka Windows pro vytvoření kopie získaní Vašeho kmene v jiném adresáři, pak TortoiseSVNPřeklopit... tuto kopii do Vaši nové větve.

Obrázek 4.55. Dialogové okno Překlopení

Dialogové okno Překlopení


Ačkoli Subversion sám nečiní žádný rozdíl mezi značkami a větvemi, způsob, jakým se obvykle používají se trochu liší.

  • Značky se obvykle používají k vytvoření statického záběru projektu v určité fázi. Jako takové nejsou běžně ve vývoji používány - k tomu jsou určeny větve, což je důvod, proč vůbec doporučujeme /kmen /větve /značky strukturu úložiště. Práce na revizích značek není dobrý nápad, ale protože místní soubory nejsou chráněny proti zápisu nic Vám nebrání udělat toto omylem. Nicméně pokud se pokusíte odevzdat cestě do úložiště, která obsahuje /značky/, bude Vás TortoiseSVN varovat.

  • Je možné, že je třeba provést další změny ve vydání, které jste již označkovali. Správný způsob, jak toto zvládnout je nejdříve vytvořit novou větev ze značky a větev odevzdat. Proveďte Vaše Změny této větve a pak vytvořte novou značku z této nové větve, např. Verze_1.0.1.

  • Pokud změníte pracovní kopii vytvořenou z větve a odevzdáte ji, pak všechny změny jdou do nové větve a ne do kmene. Pouze změny jsou uloženy. Zbytek zůstává lacinou kopií.