4IT přednáška Správa verzí Luboš Pavlíček
1. přednáška - správa verzí 2 Cíle správy verzí centralizované místo, kde jsou uloženy různé verze SW a souvisejících dat, historické verze - revize dle platformy/zákazníka - varianty řízený přístup pro udržení konzistence, zdroj pro sestavení aplikací a nepřetržitou integraci, poskytovat aktuální data jednotlivým vývojářům zdroj pro "manažerské" statistiky
Nástroje pro verzování Ruční verzování adresářová struktura dohody a konvence pro označení verzí v názvech, často se používá pro dokumenty, modely,... Systémy na správu verzí podpora více uživatelů, podpora porovnávání rozdílů, ukládání všech verzí v zapouzdřené formě, např. rcs, CVS, Subversion, Perforce, Visual Sourcesafe, ClearCase, wiki - pro textové informace © Luboš Pavlíček 1. přednáška - správa verzí 3
4 CVS (Concurrent Versioning System) sdílené úložiště, soukromé pracovní prostory, zjišťování stavu prvků, rozdílů proti úložišti, podpora více uživatelů (optimistický přístup k zamykání souborů), lokální či vzdálené úložiště, nadstavba nad rcs, příkazová řádka, grafické nadstavby, integrace do mnoha IDE a nástrojů
5 © Luboš Pavlíček1. přednáška - správa verzí Subversion nástupce CVS nové možnosti: přejmenování, verzování adresářů, atomický commit, binární diff, možnost přístupu přes webdav (přístupová práva), způsob práce a příkazy podobné CVS
6 © Luboš Pavlíček1. přednáška - správa verzí SVN: nástroje příkazová řádka, samostatné TortoiseSVN integrované do vývojového prostředí Eclipse, NetBeans,... správa přes web, statistiky např. chora, websvn, wsvn, integrace do nástrojů pro sestavování ant, Hudson, ....
Eclipse a NetBeans nutno doinstalovat plugin, subclipse subclipse – subclipse.tigris.org subversive – NetBeans 6.5 Subversion 1.5 for Windows doinstalovat plugin „Subversion 1.5 for Windows“ nainstalovat si řádkového klienta 7 © Luboš Pavlíček1. přednáška - správa verzí
Přístup k úložišti - protokol přes protokol http/https přes speciální protokol svnserve (tcp/3690) svn://host.example.com/project1 přímo na souborovém systému (file:) file:///var/svn/user/pavlicek kombinace ssh+file svn+ssh://host.example.com/repos/project 8 © Luboš Pavlíček1. přednáška - správa verzí
9 kitscm – přístup k úložištím úložiště pro jednotlivce úložiště pro projekty a skupiny
10 © Luboš Pavlíček1. přednáška - správa verzí kitscm - přístup k úložišti plnohodnotný přístup - pomocí klienta k SVN: řádkový klient - subversion.tigris.org tortoiseSVN Eclipse + plugin Subclipse, popř. Subversive NetBeans využívá se řádkový klient nebo plugin „SubVersion 1.5 for Windows“ přístup pouze ke čtení: pomocí www prohlížeče - pouze poslední verzi, pomocí aplikace na prohlížení - konkrétně WebSVN Doporučení: činnost pouze v trunku (vlastní vývoj): používat Eclipse či NetBeans činnost mimo trunk (s více projekty, vytvoření tagu/větve, spojování větví,...): samostatný klient, popř. v IDE, kontrola obsahu na serveru: přes webové rozhraní
1. přednáška - správa verzí 11 Jednotlivé části systému (subversion) pracoviště
1. přednáška - správa verzí 12 Úložiště - repository úložiště Úložiště (databáze projektu, repository) = sdílený datový prostor, kde jsou uloženy všechny prvky konfigurace projektu,
13 © Luboš Pavlíček1. přednáška - správa verzí Struktura úložiště obvykle adresářová, v úložišti více projektů, každý projekt obvykle má: Kmen (trunk) – hlavní vývojová linie, Větve (branches) – paralelní vývojová linie Značky (tags) – důležitý milník, stav konfigurace v určitém čase, např. pmd pmd pmd pmd …….
14 © Luboš Pavlíček1. přednáška - správa verzí Struktura úložiště / projekt1 trunk tags verze 0.1 verze 0.2 verze 0.3 branches projekt2 /adventura/trunk logika textoveRozhrani grafika TextoveRozhrani.java Hra.java Vec.java Mistnost.java
15 © Luboš Pavlíček1. přednáška - správa verzí počítač vývojářeúložiště Pracoviště - workspace c:\svn projekt1 projekt2 trunk tags branches / projekt1 trunk tags branches projekt2 trunk tags branches
16 © Luboš Pavlíček1. přednáška - správa verzí Revize čas
17 © Luboš Pavlíček1. přednáška - správa verzí Subversion "skrytý" adresář.svn v něm údaje o změnách v pracovišti práce s revizemi lze stáhnout konkrétní revize (jeden soubor z revize či všechny), porovnávat soubory v jednotlivých revizích, některé soubory se nepřenášejí!!! předdefinové v klientech: *.bak, *.*~, *.*# lze rozšířit přes property svn:ignore pro jednotlivé adresáře, vhodné *.class, *.ctxt
18 © Luboš Pavlíček1. přednáška - správa verzí Operace mezi pracovištěm a úložištěm check-out – vytvoří lokální pracoviště a zkopíruje prvky z úložiště update – zkopíruje se kopie prvků do lokálního pracoviště, commit (check-in) – uložení změněných prvků do úložiště, export import
Operace na pracovišti i úložišti I add – začlenění souboru/adresáře delete – smazání souboru či adresáře mkdir – vytvoření adresáře move – přesun/přejmenování souboru copy (branch/tag) – vytvoření kopie souboru/adresáře na pracovišti či v úložišti, též vytvoření větve či značky proplist, propset, propdel – správa vlastností (properties), 19 © Luboš Pavlíček1. přednáška - správa verzí
úložiště projekt 1projekt 2 kmenznačka 1značka 2 značka 1kmen počítač 1 pracoviště počítač 2 pracoviště kmen en kmen en kmen
Operace na pracovišti i úložišti II revert – vrácení úprav na pracovišti cleanup – oprava pracoviště do stabilního stavu po nedokončených operacích, lock – nastavení zámku, unlock – zrušení zámku, resolved – nastavení příznaku, že konflikt je vyřešen, 21 © Luboš Pavlíček1. přednáška - správa verzí
Konflikty – přístup Copy-Modify-Merge 1 22 © Luboš Pavlíček1. přednáška - správa verzí A AA HarrySally Dva uživatelé si zkopírují soubor A A’A’A”A” HarrySally Oba soubor editují A”A” A’A’A”A” HarrySally Sally odešle změny na server A”A” A’A’A”A” Harry má smůlu - HarrySally X commit
Konflikty – přístup Copy-Modify-Merge 2 23 © Luboš Pavlíček1. přednáška - správa verzí A”A” A’ A”A”A” HarrySally Harry provede update A”A” A*A*A”A” HarrySally Harry sloučí soubory (merge) A*A* A*A*A”A” HarrySally Harry odešle sloučenou verzi A*A* A*A*A*A* Sally si též zaktualizuje HarrySally update commitupdate
24 © Luboš Pavlíček1. přednáška - správa verzí Konflikty - Copy-Modify-Merge 3 při operacích update a commit, více souborů po update: 1.ručně vyřešit konflikt do souboru "Hra.java" 2.resolve – nastavení příznaku, že konflikt vyřešen, 3.update též lze zrušit změny - revert Hra.java- správná verze Hra.java.mine- moje úpravy Hra.java.r1- počáteční stav u mne Hra.java.r2- stav v úložišti
Operace na pracovišti i úložišti III lock – nastavení zámku, unlock – zrušení zámku, optimistický zámek lze editovat bez získání zámku, nelze provést commit, pokud někdo jiný má zámek, pesimistický zámek bez získání zámku nelze provést žádné úpravy, k souborům s požadavkem na pesimistický zámek se nastavuje vlastnost (property) svn:needs-lock 25 © Luboš Pavlíček1. přednáška - správa verzí
Konflikty – použití zámků (lock) 26 © Luboš Pavlíček1. přednáška - správa verzí A AA HarrySally Dva uživatelé si zkopírují soubor A AA HarrySally Harry požádá o zámek A A’A’A HarrySally Sally požádá o zámek A’A’ A’A’A Harry odešle a odemkne HarrySally X commitLOCK UNLOCK
27 © Luboš Pavlíček1. přednáška - správa verzí Struktura individuálního úložiště / adventura trunk tags textovaVerze grafickaVerze adventuraZaklad trunk tags trunk logika Mistnost.java Vec.java Hra.java textoveRozhrani TextoveRozhrani.java grafika
28 © Luboš Pavlíček1. přednáška - správa verzí Doporučení: práce doma a ve škole doma s připojením k internetu poprvé provést checkout trunku, po změnách commit, při vytváření značek: v samostatném pomocném adresáři, checkout celého úložiště, zkontrolovat obsah trunku, vytvořit značku, commit na server, zrušit adresář, ve škole - vytvořit adresář na lokálním disku, po práci zrušit,
29 © Luboš Pavlíček1. přednáška - správa verzí Doporučení: práce se soubory v pracovišti přidání nového souboru/adresáře - nutno add (klient obvykle navrhne) náhodné zrušení souboru - operací revert lze obnovit soubor z úložiště či z předchozích revizí, úmyslné zrušení souboru - přes klienta !!!, přejmenování/přesun souboru – přes klienta,
Uložení rozdílových informací 1 Weave (tkanina) ukládají se jednotlivé řádky a čísla revizí, ve kterých se nachází, používá se v SCCS, pomalé, lze snáz a lépe automatizovat merge, 1. přednáška - správa verzí 30 Z4 A1, 2, 3, 4 X2 B1, 2, 3, 4 Y3 ABAB AXBAXB ABYABY ZABZAB vývoj řádek v souboru uloženo v souboru v úložišti
Uložení rozdílových informací 2 Delta rozdíly mezi dvěma verzemi souboru, různé algoritmy (diff, xdelta, zdelta, …), 1. přednáška - správa verzí 31 public class Hello { public static void main(String [] args) { System.out.println("Hello world"); } public class Hello { public static void main(String [] args) { System.out.println("Ahoj svete"); } 3c3 < System.out.println("Hello world"); --- > System.out.println("Ahoj svete"); Rozdílový soubor z programu diff
Distribuovaná správa verzí výhody rychlejší přístup, není single-point-of- failure, snazší vytváření větví, zkušebních verzí nevýhody zabírá hodně místa na stanici, v úložišti by měl být pouze jeden projekt, chybí podpora v IDE, 1. přednáška - správa verzí 32
Distribuovaná správa verzí 2 Některé servery: darcs – napsaný v Haskellu, git – používá se pro jádro linuxu, Bazaar – používá se pro vývoj Ubuntu, mercurial – projekty NetBeans, OpenJdk, OpenSolaris, Xine, … 1. přednáška - správa verzí 33
34 © Luboš Pavlíček1. přednáška - správa verzí Literatura Pilato C.M., Collins-Sussman B., Fitzpatrick B.W.: Version Control with Subversion. On-line na