9. Archivace a verzování svn Cvičení předmětu BI-PUN (Pokročilé Unixové Nástroje) Příprava studijního program u Inform a tik a je podporována proje k te m financovaným z Evropského sociálního fondu [https ://www.es fc r.c z/] a rozpočtu hlavního m ěsta Prahy [http://www.praha.eu/]. Praha & EU: Investujem e do vaší budoucnosti Zprovoznění SVN serveru Zák ladní nástroj: svnadmin Vytváře ní re positářů, zálohy. Volá se zřídka, na většinu úkolů se používá servisní příkaz svn. Založení repositáře cd /var/svn svnadmin create repo (repo je libovolné jm é no re positáře) Import projektu Nový projekt potřebuje adresář v repositáři. svn mkdir file:///var/svn/repo/fit (Nastavte si pře de m svůj oblíbe ný e ditor (VISUAL).) Import souborů projektu Vše chny soubory ve fitprojekt naim portuje m e do nové ho adre sáře v re positáři. cd /home/fituser/fitproject svn import file:///var/svn/repo/fit</code> ==== Práce s repositářem ==== <code>svn checkout file:///var/svn/repo/fit... svn commit. -m "Committed changes to..." soubor svn compare -r R1:R2 soubor
svn revert soubor Návrat k vybrané ve rzi: svn update -r Rn Nápověda k příkazům je dostupná přím o přes servisní příkaz svn: svn help prikaz Branches V proje k tové m adre sáři je vhodné vytvořit podadre sáře trunk a branch a naim portovat je do SVN. Vše chny proje k tové soubory budou v trunk. #Přímá kopie svn copy file:///var/svn/repo/fit/trunk \ file:///var/svn/repo/fit/branch/mybranch \ -m "Vytvarim branch /fit/trunk." Alternativně s prozkoum áním, co se děje: cd fit svn copy trunk branch/mybranch #A + = kopie existujících dat svn commit -m "Vytvarim branch /fit/trunk." Vznikla obdoba hardlinku na existující soubory, neplýtvá se m ístem. svn checkout file:///var/svn/repo/fit/branch/mybranch Pracujte s vývojovou i hlavní větví, uložte několik verzí stejného souboru a sledujte vývoj souboru soubor v historii: svn log --verbose soubor Promítání změn do vývojové větve Pokud dochází k vývoji na stejných souborech nebo dokonce stejných m ístech v kódu, m ůže se stát následné slučování zm ěn obtížné a časově náročné. Sledováním zm ěn v hlavní vývojové větvi vidím e, co se kde m ění a včas zm ěny zkoum ám e. svn diff -r 1:2 file:///var/svn/repo/fit/trunk Zm ěny si prom ítnem e do svých lokálních souborů: svn merge -r 1:2 file:///var/svn/repo/fit/trunk M soubor nebo je tam konflikt:
C soubor Nyní je třeba soubor zrevidovat (portovat zm ěny), resp. vyřešit konflikt (rozdílné úpravy stejného m ísta v souboru. svn commit -m "soubor ported r2 from trunk." soubor Transmitting file data. Committed revision 3. Nelíbi-li se nám zm ěny, je potřeba v každém případě spojení dokončit, nebo odvolat svn revert, případně svn revert recursive. svn merge --dry-run -r 1:2 file:///var/svn/repo/fit/trunk je m ožné zavolat předem. Slučování Při slučování do hlavní větve nikdy neprovádět porovnávání m ezi aktuálním i verzem i. Správný postup: najdem e si revizi, kde jsm e oddělili slučovanou větev, např. 10. Aktuální revize se jm enuje HEAD. Aplikovat tedy chcem e svn diff revize 10:HEAD. svn log --verbose --stop-on-copy file:///var/svn/repo/fit/branch/mybranch r10 fituser 2011-11-18 11:26:56-0000 (Fri, 18 Nov 2011) 2 lines Changed paths: A /fit/branch/mybranch (from /fit/trunk:10) Nyní provedem e sloučení a m usím e vyřešit všechny konflikty: cd fit/trunk svn update At revision 34. svn merge -r 10:34 file:///var/svn/repo/fit/branch/mybranch U header U Makefile M soubor M header M Makefile # Zde je schována největší práce: diff, compile, test... svn commit -m "Merged mybranch changes r10:34 into the trunk." header soubor Makefile Transmitting file data... Committed revision 35. Pokračování ve vývoji v oddělené větvi Je m ožné a běžné. Nesm ím e ale zapom enout, co už jsm e aplikovali do hlavní větve.
cd calc/trunk svn log r35 fituser 2011-11-18 11:33:26-0000 (Fri, 18 Nov 2011) 1 line Merged mybranch changes r10:34 into the trunk. Vše nyní vím e: aplikujem e rozdíly m ezi 35 a HEAD. Pokračování ve vývoji v oddělené větvi Je m ožné a běžné. Nesm ím e ale zapom enout, co už jsm e aplikovali do hlavní větve. cd calc/trunk svn log r35 fituser 2011-11-18 11:33:26-0000 (Fri, 18 Nov 2011) 1 line Merged mybranch changes r10:34 into the trunk. Vše nyní vím e: aplikujem e rozdíly m ezi 35 a HEAD. Závěrečné spojení Alternativně lze postupovat i takto: Prom ítnem e-li všechny zm ěny z hlavní větve do naší, rozdíl pro spojení budou jen naše lokální zm ěny. cd trunk svn update At revision 91. svn merge file:///var/svn/repo/fit/trunk@91 \ file:///var/svn/repo/fit/branch/mybranch@91 U hlavicka A newdirectory A newdirectory/newfile Úkol: Provoz SVN Zprovozně te SVN. Povolte vzdále ný přístup, založte proje k t, otestujte. Nainstalujte a nak onfigurujte we bový se rve r a we bový inte rface k SVN. Doporučená literatura
http://svnbook.re d-be an.com /e n/1.5/inde x.htm l [http://s vnbook.red- bean.c om/en/1.5 /index.html]