Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Správa verzí Luboš Pavlíček.

Podobné prezentace


Prezentace na téma: "Správa verzí Luboš Pavlíček."— Transkript prezentace:

1 Správa verzí Luboš Pavlíček

2 Cíle správy verzí místo, kde jsou uloženy různé verze souborů,
historické verze - revize dle platformy/zákazníka - varianty sdílení kódu mezi vývojáři a mezi počítači zdroj pro sestavení aplikací, zdroj pro "manažerské" statistiky, 1. přednáška - správa verzí

3 vývoj revizí včetně vytvoření jedné samostatné větve (branch)
Lokální správa verzí víceuživatelské systémy s terminály, sdílený diskový prostor, SCCS (1972), rcs (1982), 1.1 1.2 1.3 2.1 2.2 1.3.1 vývoj revizí včetně vytvoření jedné samostatné větve (branch) 1. přednáška - správa verzí

4 Centralizovaná správa verzí
úložiště/ repository server x desktop Alice - pracovní adresář (workspace) Bob - pracovní adresář (workspace) Joel - pracovní adresář (workspace) 1. přednáška - správa verzí

5 Centralizovaná správa verzí
CVS – Concurent Version System (1990), nadstavba na rcs, Subversion (2000), Rational ClearCase (1992), Visual SourceSafe (1994), Perforce (1995), Team Foundation Server (2005), ... komerční 1. přednáška - správa verzí

6 Decentralizovaná správa verzí
centrální úložiště/ repository server Joel repository Alice repository Bob repository desktop x Alice - pracovní adresář (workspace) Bob - pracovní adresář (workspace) Joel - pracovní adresář (workspace) 1. přednáška - správa verzí

7 Distribuovaná správa verzí
výhody lze definovat více variant workflow, vývojáři obvykle dělají lokální commity po menších změnách, snazší vytváření větví, není single-point-of-failure, rychlejší přístup pro některé operace, nevýhody složitější, jedno úložiště = jeden projekt, 1. přednáška - správa verzí

8 Decentralizovaná správa verzí
BitKeeper (1998), Darcs (2002), Bazaar (2005), Git (2005), Mercurial (2005), 1. přednáška - správa verzí

9 Základní operace stažení poslední verze z úložiště,
stažení „starší“ verze z úložiště, odeslání změn na server, zobrazení souborů z konkrétní revize, zobrazení rozdílů mezi verzemi souborů, slučování změn od více uživatelů (merge) a řešení kolizí, vytváření a slučování větví, 1. přednáška - správa verzí

10 Zjišťování změn v pracovišti
před odesláním změn do úložiště musí uživatel označit přidané/odebrané soubory/adresáře, IDE většinou označují za uživatele, některé soubory se nepřenášejí do úložiště !!! předdefinové v klientech: *.bak, *.*~, *.*# lze rozšířit přes property svn:ignore vhodné *.class, *.ctxt 1. přednáška - správa verzí

11 Revize revize – verze souboru či stavu projektu* v čase,
číslování revizí: každý soubor nezávisle (CVS), globální číslování jednotlivých změn v úložišti (Subversion), kryptografickým otiskem celého stavu projektu (Git, Mercurial), *) pro stav projektu se používá pojem changeset 1. přednáška - správa verzí

12 Značky (tags) Značka (tag) – důležitý milník, stav konfigurace v určitém čase, např. subversion revize: subversion revize: pmd-releases/4.3 0d3cba2a2e (5611) pmd-releases/ dcde0edb5 (6736) pmd-releases/ a8d7c3bcc (6862) Git 1. přednáška - správa verzí

13 Větvení každý projekt obvykle má:
Kmen (trunk) – hlavní vývojová linie, Větve (branches) – paralelní vývojová linie, 1. přednáška - správa verzí

14 Workflow – organizace práce
jak se pracuje s větvemi, jak začlenit změny od jednotlivých vývojářů, vývojář sám na jednom počítači, vývojář sám na více počítačích, více vývojářů rovnocenných přístupem, jeden/několik vývojářů schvaluje příspěvky od ostatních, stabilní a vývojová větev, větve pro jednotlivé klienty, větvení pro překladatele, ... 1. přednáška - správa verzí

15 x úložiště (repository) pevný bod server desktop
Alice - pracovní adresář (workspace) Bob - pracovní adresář (workspace) Joel - pracovní adresář (workspace) 1. přednáška - správa verzí

16 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 © Luboš Pavlíček 1. přednáška - správa verzí

17 SVN: nástroje TortoiseSVN příkazová řádka, samostatné
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, .... © Luboš Pavlíček 1. přednáška - správa verzí

18 Struktura úložiště pro uživatele emuluje strukturu adresáře,
v úložišti může být více projektů, globální číslování revizí, větve, značky: vytvořením podadresáře vhodného jména, obecná operace copy, © Luboš Pavlíček 1. přednáška - správa verzí

19 Struktura úložiště / adventura trunk tags verze 0.1 verze 0.2
pexeso trunk tags branches verze 0.1 verze 0.2 verze 0.3 Hra.java Vec.java Mistnost.java TextoveRozhrani.java © Luboš Pavlíček 1. přednáška - správa verzí

20 Pracoviště - workspace
počítač vývojáře úložiště c:\svn pexeso adventura trunk tags branches / pexeso adventura trunk tags branches © Luboš Pavlíček 1. přednáška - správa verzí

21 Pracoviště - workspace
ve skrytém adresáři .svn jsou: adresa úložiště, číslo revize, ... verze souborů stažené z úložiště , běžné adresáře: v něm dělá uživatel úpravy, tj. obsahuje aktuální verze souborů, mohu promíchat pracoviště dvou projektů? © Luboš Pavlíček 1. přednáška - správa verzí

22 Operace mezi pracovištěm a úložištěm
check-out – vytvoří lokální pracoviště a zkopíruje obvykle poslední revizi z úložiště, update – aktualizuje se lokální pracoviště na poslední verzi v úložišti, commit (check-in) – odeslání změněných prvků/souborů do úložiště, export import svn nefunguje jako dropbox – nic automaticky nepřenáší © Luboš Pavlíček 1. přednáška - správa verzí

23 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), musíte svn říct, že přibyl/ubyl soubor/adresář ? © Luboš Pavlíček 1. přednáška - správa verzí

24 úložiště projekt 1 projekt 2 kmen kmen kmen kmen en značka 1 značka 2
počítač 1 počítač 2 kmen kmen en pracoviště pracoviště

25 Operace na pracovišti i úložišti II
revert – vrácení úprav na pracovišti, pomocí revert se vrátím ke stavu souboru z revize (z posledního update). checkout vybrané revize – chci starší revizi, cleanup – oprava pracoviště do stabilního stavu po nedokončených operacích, - někdy cleanup nepomůže: smazat „pracoviště“ a udělat nový checkout, © Luboš Pavlíček 1. přednáška - správa verzí

26 Konflikty – přístup Copy-Modify-Merge 1
Dva uživatelé si zkopírují soubor Oba soubor editují A A A A A’ A” Harry Sally Harry Sally Sally odešle změny na server Harry má smůlu - A” A” commit commit X A’ A” A’ A” © Luboš Pavlíček 1. přednáška - správa verzí Harry Sally Harry Sally

27 Konflikty – přístup Copy-Modify-Merge 2
Harry provede update Harry sloučí soubory (merge) A” A” update A’ A” A” A* A” Harry Sally Harry Sally Harry odešle sloučenou verzi Sally si též zaktualizuje V subversion se po sloučení A* A* commit update A* A” A* A* © Luboš Pavlíček 1. přednáška - správa verzí Harry Sally Harry Sally

28 Konflikty - Copy-Modify-Merge 3
při operacích update a commit, více souborů po update: ručně vyřešit konflikt do souboru "Hra.java„ (merge) resolve – nastavení příznaku, že konflikt vyřešen, commit update 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 © Luboš Pavlíček 1. přednáška - správa verzí

29 © Luboš Pavlíček 1. přednáška - správa verzí

30 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 distribuované systémy na správu verzí nepodporují zámky, © Luboš Pavlíček 1. přednáška - správa verzí

31 Konflikty – použití zámků (lock)
Dva uživatelé si zkopírují soubor Harry požádá o zámek A A LOCK A A A A Harry Sally Harry Sally Sally požádá o zámek Harry odešle a odemkne Při commitu se automaticky uvolňuje zámek A A’ LOCK commit X UNLOCK A’ A A’ A © Luboš Pavlíček 1. přednáška - správa verzí Harry Sally Harry Sally

32 Properties - vlastnosti
pro adresář/soubor lze nastavovat properties, které ovlivňují chování klienta svn © Luboš Pavlíček 1. přednáška - správa verzí

33 Property svn:ignore – ignorovat soubory
seznam souborů, které se nemají přenášet do úložiště, např. Thumbs.db *.class *.ctxt klienti mají v sobě obvykle zabudovaný předpis, jaké soubory mají ignorovat – každý klient různý  © Luboš Pavlíček 1. přednáška - správa verzí

34 Property svn:keywords
používají se následující keywords: Date, Revision, ID, Author, URL, Header v souboru „Pokus.java“ je použijete: nastavíte property svn:keywords pro soubor „Pokus.java“ na “Date Author” provedete commit: Author of last commit: $Author$: Date of last commit : $Date$: Author of last commit: $Author: pavlicek $: Date of last commit : $Date: :17: (po, 21 IX 2009) $: © Luboš Pavlíček 1. přednáška - správa verzí

35 Protokoly, KITSCM.VSE.CZ
© Luboš Pavlíček 1. přednáška - správa verzí

36 Přístup k úložišti svn - protokoly
přes protokol http/https https://kitscm.vse.cz/svn/user/pavlicek 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 © Luboš Pavlíček 1. přednáška - správa verzí

37 kitscm – přístup k úložištím
úložiště pro jednotlivce úložiště pro projekty a skupiny https://kitscm.vse.cz/svn/user/uživ_jméno/ https://kitscm.vse.cz/svn/user/xabcd01/ https://kitscm.vse.cz/svn/user/pavlicek/ https://kitscm.vse.cz/svn/user/pavlicek/adventura/trunk https://kitscm.vse.cz/svn/proj/4it115_po_0915_p_109 https://kitscm.vse.cz/svn/proj/4it251_po_1245_p_107 https://kitscm.vse.cz/svn/proj/pexeso/ https://kitscm.vse.cz/svn/proj/clovece_nezlob_se/ © Luboš Pavlíček 1. přednáška - správa verzí

38 Subversion - verze hlavní verze svn nejsou zpětně kompatibilní,
automatická konverze na novou strukturu, pokud máte pracoviště ve verzi 1.6, tak po přístupu klientem 1.7 se změní struktura pracoviště. Klient verze 1.6 již nemůže přistupovat k pracovišti. klient verze svn (řádkový klient) 1.8 NetBeans a novější 1.7 NetBeans 7.4 a novější 1.8 s klientem Subclipse 1.10 (pro Eclipse) Intellij IDEA 13 a novější TortoiseSVN (GUI pro windows) © Luboš Pavlíček 1. přednáška - správa verzí

39 Nejčastější chyby odeslání změn jen v části projektu,
chybí odvaha vyřešit kolize, jména souborů/adresářů: v úložišti se rozlišují malá/velká písmena,  nelze stáhnout do Windows !!! © Luboš Pavlíček 1. přednáška - správa verzí

40 Více projektů v úložišti
/ adventura pexeso trunk tags branches verze 0.1 verze 0.2 verze 0.3 / trunk branches adventrua pexeso adventura verze 0.1 verze 0.2 tags trend posledních let: jedno úložiště == jeden projekt © Luboš Pavlíček 1. přednáška - správa verzí

41 Rozdílové informace, úspora místa
© Luboš Pavlíček 1. přednáška - správa verzí

42 Ukládání informací na serveru
snaha o úsporu místa, pokud se soubor mezi revizemi nezmění, neukládá se nová kopie, komprimace souborů, obsahově adresovatelný systém souborů, ukládání pouze rozdílů mezi revizemi 1. přednáška - správa verzí

43 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, Z 4 A 1, 2, 3, 4 X 2 B 1, 2, 3, 4 Y 3 A B A X B A B Y Z A B vývoj řádek v souboru uloženo v souboru v úložišti 1. přednáška - správa verzí

44 Uložení rozdílových informací 2
Delta rozdíly mezi dvěma verzemi souboru, různé algoritmy (diff, xdelta, zdelta, …), 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"); } V úložišti je počáteční verze souboru a poté rozdílové soubory mezi jednotlivými verzemi. 3c3 < System.out.println("Hello world"); --- > System.out.println("Ahoj svete"); 1. přednáška - správa verzí Rozdílový soubor z programu diff

45 Git, Mercurial nepoužívají se rozdílové soubory,
ke každému souboru se počítá otisk (hash) SHA1 pokud v cíli je soubor se stejným otiskem, tak se nepřenáší, neukládá podruhé, uloží se pouze metainformace, 1. přednáška - správa verzí

46 Literatura Pilato C.M., Collins-Sussman B., Fitzpatrick B.W.: Version Control with Subversion. On-line na svnbook.red-bean.com Chacon, S.: „Pro Git“. česká verze on-line na knihy.nic.cz © Luboš Pavlíček 1. přednáška - správa verzí


Stáhnout ppt "Správa verzí Luboš Pavlíček."

Podobné prezentace


Reklamy Google