Subversion. Jakub Vlček

Podobné dokumenty
Vladimír

SCM = Source Code Management software, základní typologie rozdělení je podle počtu a umístění základního úložiště kódu(=repository) na:

Obecné informace o cvičeních

Semestrální práce 2 znakový strom

9. Archivace a verzování svn

Použití Subversion pro verzování TEXových dokumentů

Coordinate System Editor Software

Versiondog Lukáš Rejfek, Pantek (CS) s.r.o. 7/2014

Správa verzí souborů na cvičení

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

BM Software, Databáze Docházky 3000 na NAS serveru (pro MySQL) Němčičky 84, Němčičky u Břeclavi. Úvodní informace:

Úvod do Operačních Systémů

O2 Managed Backup & Restore Power

Zálohování ů pomocí klienta Mozilla Thunderbird

Přehled témat. Základní pojmy

MANUÁL K OBSLUZE REDAKČNÍHO SYSTÉMU / wordpress

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

PŘIDÁNÍ SOUBORŮ DO OBLASTI PŘIPRAVENÝCH ZMĚN

VCS CVS - Concurrent Version System SVN - Subversion Distribuované verzovací systémy DVCS Verzování. Základní pojmy verzování souborů

Linux-příkazový řádek

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Zálohování a obnova databáze. Kryštof Měkuta

Úvod do verzovacích systémů

GIT hands-on. Mgr. Šimon Tóth. 12. dubna () GIT hands-on 12. dubna / 25

Choose a building block. Znalostní báze Kleos. Kleos 6.5 (březen 2019)

MapleCloud a jeho použ ití. Vladimír Žák

CAD library. Spuštění aplikace. Práce s aplikací. Popis okna

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Návod na používání webmailu

Autopark a složka Program Files v operačních systémech Windows Vista, Windows Server 2008/2012/2016 a Windows 7/8/8.1/10

H.P.L. Systems s.r.o. Jičínská PRAHA 3, CZ Obsah

Verzovací systémy. Pořádek především!

Uživatelská příručka IS KP14+ Žádost o změnu. Operační program. Výzkum, vývoj a vzdělávání Programové období

Konvertor diakritiky 3. Instalace

Vstupní a vstupní proudy v C++

1. Základní pojmy, používané v tomto manuálu. 2. Stránky

Školící dokumentace administrátorů IS KRIZKOM (úroveň ÚSÚ) role ( administrátor )

Hydroprojekt CZ a.s. WINPLAN systém programů pro projektování vodohospodářských liniových staveb. HYDRONet 3. Modul PODKLADOVÉ MAPY

Příloha 6. Palety nástrojů

Úvod do Operačních Systémů

Základní pojmy verzování souborů. SVN - Subversion vybrané pokročilé vlastnosti. Správce verzí. Repositár

Nápověda aplikace Patron-Pro

Školící dokumentace administrátorů IS KRIZKOM (úroveň KRAJ) (role manager, administrátor )

Správa souborů soubor, stromová struktura. Mgr. Jan Veverka Střední odborná škola sociální obor ošetřovatel

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

QNAP TS-409 a QNAP TS-409 Pro. Jak použít funkci Online RAID Capacity Expansion a RAID Level Migration

Nástrojová lišta v editačním poli

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Návod k aplikaci DPH Kontrol

Git. Milan Rybář

Manuál k programu KaraokeEditor

Změna názvu banky v aplikaci elektronického bankovnictví MultiCash Classic

Implementace LL(1) překladů

MS SQL Server 2008 Management Studio Tutoriál

Zde se objeví všechny spisy, které má uživatel v ISAS vyznačeny na sebe.

Databáze I. 5. přednáška. Helena Palovská

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici

Informační manuál PŘIHLÁŠENÍ DO SÍTĚ NOVELL (ZAMĚSTNANEC, DOKTORAND)

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

1 Uživatelská dokumentace

MANUÁL PRO UŽIVATELE WEBU ADRESÁŘ DESIGNÉRŮ

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

HELIOS - Zálohování BüroKomplet, s.r.o.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

zoom-driver Manuál k redakčnímu systému zoom-driver created by virtual-zoom s.r.o.

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

y v TimeMakeru

OFF - LINE. PRO ZAČÁTEČNÍKY Zdroje textů a obrázků

Microsoft. Word. Hromadná korespondence. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

Modul Konfigurace MTJ Service, s.r.o.

Základní příkazy OS UNIX


Jednoduchý uživatelský manuál k programu Cat s Paradise

QuarkXPress soubor ReadMe

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Vytvoření pokročilé Fotogalerie v Drupalu - Views

Prohlížení a editace externích předmětů

PSP Validator Documentation

Evidence objednávek pečiva

Dokumentace pro správu zlínských DUM

Paralelní a distribuované výpočty (B4B36PDV)

Programování v C++ 2, 7. cvičení

Jak na online mezičasy s použitím EmmaClienta

1. Paleta History (Historie)

Maturitní téma: Operační MS-DOS

Z. Kotala, P. Toman: Java ( Obsah )

Revit link. Propojení mezi Scia Engineer a Revit structure

II. Elektronická pošta

UNIVERZITA PARDUBICE Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Obsah. Úvod Co je KORG KONTROL Editor?... 2 Požadavky na systém... 2 Instalace... 3

Uživatelský manuál aplikace. Dental MAXweb

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

8.3 Popis dialogových oken

Formátování pomocí stylů

Modul 2. První sada úkolů:

Základní příkazy pro práci se soubory

IBRIDGE 1.0 UŽIVATELSKÝ MANUÁL

PROGRAMOVÁNÍ V C++ CVIČENÍ

Transkript:

Subversion Jakub Vlček

Obsah Konflikty Strukturální(stromové) konflikty Sparse directories

Konflikty Vyskytují se při aktualizaci dvou souborů s různými změnami Konflikt nenastane pokud jsou úpravy na jiných místech Kdy nastane konflikt? Pokud SVN detekuje konflikt, nabídne různé způsoby, jak ho vyřešit edit otevře soubor z úložiště v editoru diff-full zobrazí všechny změny v souboru z úložiště resolved přijmeme soubor z úložiště display-conflict zobrazí všechny konflikty mine-conflict moje aktualizace přepíší aktualizace z úložiště their-conflict aktualizace souboru z úložiště přepíší mé mine-full přijme celý můj soubor (i nekonfliktní části) theirs-full přijme celý soubor z úložiště (i nekonfliktní části) postpone označí konflikt k vyřešení později launch spustí externí nástroj k řešení konfliktů show all zobrazí tento seznam

Zobrazení konfliktů Pomocí příkazu diff-full nebo diff-conflict Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: df ---.svn/text-base/sandwich.txt.svn-base Tue Dec 11 21:33:57 2007 +++.svn/tmp/tempfile.32.tmp Tue Dec 11 21:34:33 2007 @@ -1 +1,5 @@ -Just buy a sandwich. +<<<<<<<.mine +Go pick up a cheesesteak. +======= +Bring me a taco! +>>>>>>>.r32 Na prvním řádku je původní soubor, na druhém mé změny a na posledním změny v souboru z úložiště. diff-conflict je podobný, ale zobrazí jen konfliktní části a má jiný výpis (zobrazení všech tří stavů)

Řešení konfliktů 2 způsoby, kdy můžu konflikty řešit jednotlivě edit launch Zbytek preferuje jen jednu verzi Celý soubor mine-full their-full Jen konfliktní části mine-conflict their-conflict Pokud neumím vyřešit konflikt, hodí se příkaz postpone

Neinteraktivní režim Pomocí --non-interactive Konfliktí soubory označeny písmenem C po dokončení update můžu mezi soubory vybírat manuálně Pokud SVN rozhodne, že mohou být dva knfliktní soubory spojeny, označí konfliktní místa specialními řetězci (conflict-markers) Pro každý konfliktní soubor vytvoří SVN neverzovanou verzi Filename.mine Filename.rOLDREV Filename.rNEWREV

Příklad Pokud jsem upravil soubor sandwitch.txt, ale někdo ho mezitím upravil na serveru, SVN se chová následovně $ svn update Updating '.': Conflict discovered in 'sandwich.txt'. Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p C sandwich.txt Updated to revision 2. Summary of conflicts: Text conflicts: 1 $ ls -1 sandwich.txt sandwich.txt.mine sandwich.txt.r1 sandwich.txt.r2 Dokud nesmažu tři pomocně soubory (.mine,.r1,.r2), nelze provést commit

Řešení konfliktu Pomocí svn resolve a možnosti --accept s následujícími možnostmi base potvrdí původní verzi beze změn mine-full potvrdí celý můj soubor theirs-full potvrdí soubor z úložiště working originální soubor (bez přípony), v kterém jsem konflikty vyřešil ručně svn resolve s --accept smaže všechny dočasné soubory

Ruční editace - příklad $ cat sandwich.txt Top piece of bread Mayonnaise Lettuce Tomato Provolone <<<<<<<.mine Salami Mortadella Prosciutto ======= Sauerkraut Grilled Chicken >>>>>>>.r2 Creole Mustard Bottom piece of bread

V souboru jsou vidět 3 speciální značky složené z <, > a = Mezi < a = jsou mé změny Mezi = a > jsou změny z úložiště Pokud chci konflikt odstranit, musím tyto speciální značky odstranit Při svn update musím explicitně uvést řešení všech konfliktů

Strukturální konflikty Rozdílné od klasických konfliktů Smazání Přesunutí Přejmenování Záleží na verzi Před 1.6 více možností Od 1.6 je pracovní soubor označen jako konflikt

Strukturální konflikty - popis Před verzí 1.6 Lokálně modifikovaný objekt x přejmenování/přesunutí v úložišti(repository) Zkontroluje přejmenovaný soubor kvůli změnám Smaže starý soubor, ale pokud byl soubor lokálně upraven, nechá ho na lokálním disku jako neverzovaný Přejmenovaný soubor z úložiště přidá do lokálního úložiště PROBLÉM neverzovaný soubor v lokálním úložišti Od verze 1.6 Problémový soubor je označen jako konfliktní

Příklad Takto vypadá projekt: $ svn list -Rv svn://svn.example.com/trunk/ 13 harry Sep 06 10:34./ 13 harry 27 Sep 06 10:34 COPYING 13 harry 41 Sep 06 10:32 Makefile 13 harry 53 Sep 06 10:34 README 13 harry Sep 06 10:32 code/ 13 harry 54 Sep 06 10:32 code/bar.c 13 harry 130 Sep 06 10:32 code/foo.c $

V další verzi někdo přejmenuje bar.c na baz.c, ale já provedu jiné změny (i v souboru bar.c) $ svn diff Index: code/foo.c =================================================================== --- code/foo.c (revision 13) +++ code/foo.c (working copy) @@ -3,5 +3,5 @@ int main(int argc, char *argv[]) { printf("i don't like being moved around!\n%s", bar()); - return 0; + return 1; } Index: code/bar.c =================================================================== --- code/bar.c (revision 13) +++ code/bar.c (working copy) @@ -1,4 +1,4 @@ const char *bar(void) { - return "Me neither!\n"; + return "Well, I do like being moved around!\n"; } $

Z logu to vypadá, že někdo změnil bar.c, ale commit nelze provést: $ svn commit -m "Small fixes Sending code/bar.c svn: E155011: Commit failed (details follow): svn: E155011: File '/home/svn/project/code/bar.c' is out of date svn: E160013: File not found: transaction '14-e', path '/code/bar.c $

Při příkazu svn update odhalíme strukturální konflikt, svn ho korektně označí písemeny C a A: $ svn update Updating '.': C code/bar.c A code/baz.c U Makefile Updated to revision 14. Summary of conflicts: Tree conflicts: 1 $ $ svn status M code/foo.c A + C code/bar.c > local edit, incoming delete upon update Summary of conflicts: Tree conflicts: 1 $

Přesun/přejmenování V SVN jde o zkopírování a následné smazání původního souboru SVN umí upozornit na smazání lokálně upraveného souboru Jednoduše nelze zjistit, zda jde o přesunutí souboru nebo samostané smazání, což je ovšem potřeba -> vyplatí se číst logy $ svn log -r14 ^/trunk ------------------------------------------------------------------------ r14 harry 2011-09-06 10:38:17-0400 (Tue, 06 Sep 2011) 1 line Changed paths: M /Makefile D /code/bar.c A /code/baz.c (from /code/bar.c:13) Rename bar.c to baz.c, and adjust Makefile accordingly. ------------------------------------------------------------------------ $

svn info Ukáže informace o konfliktních souborech Left lokální soubor Right příchozí soubor $ svn info code/bar.c tail -n 4 Tree conflict: local edit, incoming delete upon update Source left: (file) ^/trunk/code/bar.c@4 Source right: (none) ^/trunk/code/bar.c@5 $ Při pokusu o commit nastane chyba, protože jsme nevyřešili konflikt $ svn commit -m "Small fixes svn: E155015: Commit failed (details follow): svn: E155015: Aborting commit: '/home/svn/project/code/bar.c' remains in conflict $

Řešení Musíme buď souhlasit nebo nesouhlasit se změnou (přesunem) Pokud souhlasím, je můj bar.c zbytečný, můžeme ho smazat a konflikt označit za vyřešený (tím ale ztratím vlastní úpravy) Pokud chci změny zachovat, musím svn explicitně říct, co chci udělat. Pokud chci změny uložit do přesunutého souboru Nejdříve musíme pomocí svn diff vytvořit patchfile, který pak upravíme tak, aby ukazoval na přejmenovaný soubor

$ svn diff code/bar.c > PATCHFILE $ cat PATCHFILE Index: code/bar.c =================================================================== --- code/bar.c (working copy) +++ code/bar.c (working copy) @@ -1,4 +1,4 @@ const char *bar(void) { - return "Me neither!\n"; + return "Well, I do like being moved around!\n"; } $ ### Edit PATCHFILE to refer to code/baz.c instead of code/bar.c $ cat PATCHFILE Index: code/baz.c =================================================================== --- code/baz.c (working copy) +++ code/baz.c (working copy) @@ -1,4 +1,4 @@ const char *bar(void) { - return "Me neither!\n"; + return "Well, I do like being moved around!\n"; } $ svn patch PATCHFILE U code/baz.c $

Změny ze souboru bar.c se dostanou do baz.c, lokální soubor můžeme smazat $ svn delete --force code/bar.c D code/bar.c $ svn resolve --accept=working code/bar.c Resolved conflicted state of 'code/bar.c $ svn status M code/foo.c M code/baz.c $ svn diff Index: code/foo.c =================================================================== --- code/foo.c (revision 14) +++ code/foo.c (working copy) @@ -3,5 +3,5 @@ int main(int argc, char *argv[]) { printf("i don't like being moved around!\n%s", bar()); - return 0; + return 1; } Index: code/baz.c =================================================================== --- code/baz.c (revision 14) +++ code/baz.c (working copy) @@ -1,4 +1,4 @@ const char *bar(void) { - return "Me neither!\n"; + return "Well, I do like being moved around!\n"; } $

Pokud se změnami nesouhlasím, zjistím se, zda v souboru baz.c nejsou nějaké změny, a následně ho smažu, vrátím zpět úpravy v Makefile $ svn delete --force code/baz.c D code/baz.c $ svn resolve --accept=working code/bar.c Resolved conflicted state of 'code/bar.c $ svn status M code/foo.c A + code/bar.c D code/baz.c M Makefile $ svn diff Index: code/foo.c ===Výpis souboru foo.c=== Index: code/bar.c ===Výpis souboru bar.c=== Index: code/baz.c ===Výpis souboru baz.c=== Index: Makefile =================================================================== --- Makefile (revision 14) +++ Makefile (working copy) @@ -1,2 +1,2 @@ foo: - $(CC) -o $@ code/foo.c code/baz.c + $(CC) -o $@ code/foo.c code/bar.c

Sparse directories svn checkout vytvoří rekurzivně pracovní kopii celé adresářové struktury se všemi soubory z úložiště Od verze 1.5 tzv. sparse directories (shallow checkouts), dovoluje kopii pouze části adresářové struktury Ostatní soubory můžeme aktualizovat později

Sparse directories - příklad Takto vypadá celá adresářová struktura $ svn checkout file:///var/svn/repos mom A mom/son A mom/son/grandson A mom/daughter A mom/daughter/granddaughter1 A mom/daughter/granddaughter1/bunny1.txt A mom/daughter/granddaughter1/bunny2.txt A mom/daughter/granddaughter2 A mom/daughter/fishie.txt A mom/kitty1.txt A mom/doggie1.txt Checked out revision 1. $

Stačí přidat parametr --depth $ svn checkout file:///var/svn/repos momempty --depth empty Checked out revision 1 $

Možné omezení hloubky --depth empty pouze cílový soubor, nikoliv podsložky či soubory ve složce --depth files cílový soubor nebo obsah složky --depth immediates cílový soubor a bezprostřední soubory a složky, složky potomků budou prázdné --depth infinity celý podstrom cílové složky Lokální kopie si pamatuje hloubku rekurze příkazy na ní se provadí do zvolené hloubky Příklady $ svn checkout file:///var/svn/repos mom-files - -depth files A mom-files/kitty1.txt A mom-files/doggie1.txt Checked out revision 1. $ svn checkout file:///var/svn/repos momimmediates --depth immediates A mom-immediates/son A mom-immediates/daughter A mom-immediates/kitty1.txt A mom-immediates/doggie1.txt Checked out revision 1. $

--depth lze použít i u jiných příkazů a omeit tak hloubku --set-depth NEW-DEPTH TARGET nastaví zapamatovanou hloubku pracovní kopie, kterou jsme již získali $ svn update --set-depth files mom-empty A mom-empty/kittie1.txt A mom-empty/doggie1.txt Updated to revision 1. $ svn update --set-depth immediates mom-empty A mom-empty/son A mom-empty/daughter Updated to revision 1. $ svn update --set-depth infinity mom-empty A mom-empty/son/grandson A mom-empty/daughter/granddaughter1 A mom-empty/daughter/granddaughter1/bunny1.txt A mom-empty/daughter/granddaughter1/bunny2.txt A mom-empty/daughter/granddaughter2 A mom-empty/daughter/fishie1.txt Updated to revision 1. $

(ne)výhody sparse directories Pokud mám více projektů v jednom úložišti Můžu pak každý projekt řešit zvlášť Menší datová náročnost v případě velkých úložišť Pokud provedu svn update set-depth empty na pracovní kopii s celou strukturou, nezahodí svn všechny změny ale skončí chybou Nelze explicitně vyloučit zvolené položky, pouze implicitně sjednotit vše ostatní

Otázky?

Zdroje Konflikty: http://svnbook.red-bean.com/en/1.7/svn.tour.cycle.html Stromové konflikty: http://svnbook.red-bean.com/en/1.7/svn.tour.treeconflicts.html Sparse directories: http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html

Díky za pozornost