SubVersion pro K2 atmitec syst Obsah Co je SubVersion.................................................................................................................................. 1 Příprava před používáním SVN ............................................................................................................ 1 Běžná práce se SubVersion...................................................................................................................... 2 Stážení aktuální verze z repository...................................................................................................... 2 Potvrzení změn do repository ............................................................................................................. 2 Nahrání nového projektu do repository.............................................................................................. 3 Prohlížení změn projektu .................................................................................................................... 3 Pokročilé operace se SubVersion ............................................................................................................ 4 Současná editace jednoho souboru dvěma uživateli .......................................................................... 4 Označení důležitých verzí .................................................................................................................... 4 Práce s větvemi ................................................................................................................................... 5 Často kladené dotazy .............................................................................................................................. 7 Mohu si lokálně zobrazit SVN detaily souborů? .............................................................................. 7 Lze do souboru automaticky zapisovat, o jakou revizi se jedná?.................................................... 7 Mohu nechat TortoiseSvn zapamatovat své heslo?........................................................................ 8 Proč se mi nezobrazují ikony stavu u souborů? .............................................................................. 8 Které soubory z K2ky dávat do repository?..................................................................................... 8 Jak si mohu SVN rozbít? .................................................................................................................. 8 Kde mohu získat další informace o SubVersion?............................................................................. 9 Rejstřík ................................................................................................................................................... 10
Co je SubVersion SubVersion (SVN) je systém pro správu verzí. Slouží hlavně jako centrální uložiště souborů s evidencí změn a především s podporou spolupráce více osob na jednom projektu. Ve společnosti K2 atmitec syst je SubVersion používán především pro archivaci "speciálů" zákazníků, pro evidenci změn a pro spolupráci na projektech. Centrálním úložiště (repository) je přístupné adrese https://svn.syst.cz/svn/k2/ z firmy i mimo ni. Uživatelé se autorizují našimi doménovými účty qgirit\jmeno.prijmeni. Pro přístup používáme speciálního klienta TortoiseSVN, který je integrován do Windows Exlorera (průzkumník, složky) a všechny funkce jsou přístupné přes druhé tlačítko myši. Stejně tak v Total Commanderu.
Příprava před používáním SVN Nainstalujte si klienta TortoiseSvn, který najdete na našem síťovém V:\Tools\SubVersion\TortoriseSvn-xxx.msi (alternativně stahnutelný http://tortoisesvn.net/downloads ). Po instalaci je třeba restartovat počítač.
disku z
Běžná práce se SubVersion Stážení aktuální verze z repository Napoprvé, kdy ještě nemáte adresář získaný a spravovaný přes SubVersion, postupujte následovně: 1. V kontextovém menu adresáře (druhé tlačítko myši) zvolte "SVN Checkout". 2. V dialogu zadejte adresu https://svn.syst.cz/svn/K2/ (viz Obrázek 1). 3. Klikněte na tlačítko "..." za adresou a vyberte adresář, který chcete stáhnout – pro ostré skripty zákazníků /Zak/Firma/trunk. 4. Po potvrzení dialogu se Vám data ze serveru stáhnou (do adresáře, který je uveden v poli Checkout directory). Každá další aktualizace tohoto adresáře provedete přes volbu "SVN Update" v kontextovém menu adresáře. Pokud požadované soubory nebudete chtít po úpravě nahrát zpět na server, tak místo "SVN Checkout" vyberte "TortoiseSVN / Export".
Obrázek 1 - Staženi z repository
Potvrzení změn do repository 1. Nejprve si stáhněte aktualizace ze serveru. Tedy, v kontextovém menu adresáře zvolte "SVN Update". 2. Pokud máte soubor, který na serveru neexistuje, je nutné ho přidat (TortoiseSVN / Add), prosté nahrání do adresáře nestačí. Obdobně pro vymazání souboru použijte TortoiseSVN / Remove (nebo jej lze odeberat při potvrzování změn). 3. Pro nahrání změn zvolte v kontextovém menu souboru nebo adresáře příkaz "SVN Commit". 4. V dialogu zkontrolujte, které změny nahráváte na server. Vždy vyplňujte stručný popis charakterizující změnu. Potvrzením pak zpřístupněte své úpravy na server.
Pokud nechcete některé typy souborů nahrávat na server (např. MujPokus.pas), zajistíte to volbou "TortoiseSVN / Add to ignore list". Typy souborů, které chcete vždy ignorovat, zadáte v nastavení TortoiseSvn / Settings / záložka General do pole Global ignore pattern, já maximalisticky používám "Bin Debug Release obj Obj ClientBin *.dir *.bak *.suo *.user *.ncb *.jpg *.exe *.dll bin *.log *.ind orig prep .#* itkGaussianDistribution.cxx .cvsignore CVS .* *.asv *.~* *~ Generated_Code"
Nahrání nového projektu do repository Následující návod udává, jak nahrát projekt do repository obecně. Doporučení postup pro zanesení do repository z běžící K2ky zákazníka naleznete v často kladených otázkách. 1. Vyčistěte všechny nepotřebné soubory a adresáře. V repository mají být pouze aktuálně platné zdrojové kódy nebo sestavy. (Pro seznam souborů viz v Často kladené otázky.) 2. V kontextovém menu hlavního adresáře zvolte TortoiseSvn / Import. 3. V dialogu zadejte cestu pro import (např. https://svn.syst.cz/svn/K2/Zak/Linet/trunk ) a vyplňte komentář. Data zákazníků patří do adresáře /Zak/Firma/trunk (nezapomeňte trunk pro označení ostré větve), Vaše soukromé projekty do /Home/Prijmeni, testy do /Test, projekty vývoje do /Proj a obecně využitelné nástroje do /Util. 4. Pokud chcete s verzí dále pracovat přes SVN, je nutné si ji stáhnout (viz Stažení aktuální verze z repository).
Prohlížení změn projektu •
SVN Stav souborů: U souborů spravovaných přes SVN je jejich aktuální stav indikován překryvným symbolem u ikonky ... viz Obrázek 2. Na naší firmě platí striktní zásada, že po ukončení Vaší práce u zákazníka nesmí v projektu zůstat žádný soubor nepotvrzený (tedy nesmí zůstat žádná červená nebo modrá ikonka).
Obrázek 2 - Ikony SVN stavu souboru
•
• •
Provedené změny: Pro zobrazení rozdílu mezi současnou a původní verzí změněného souboru zvolte v jeho kontextovém menu TortoiseSvn / Diff. Objeví se Vám porovnání původní a aktuální verze. Je zde možná i korekce změn. Toto porovnání lze vyvolat např. i před potvrzením (Commitem) Vašich změn do repository. Historii změn v projektu vyvoláte např. pomocí volby TortoiseSvn / "Show log". Autora a důvody změn pro každý řádek kódu získáte pomocí funkce TortoiseSvn / Blame z kontextového menu souboru.
Pokročilé operace se SubVersion Současná editace jednoho souboru dvěma uživateli Může dojít k situaci, že dva uživatelé editují zároveň jeden soubor, každý ve své lokální kopii (např. ZP provede drobnou opravu ve skriptu přímo u zákazníka, zatímco SIčko zapracovává na firmě novou funkčnost). SVN takové případy pomáhá řešit efektivně pomocí následujícího postupu. 1. První uživatel potvrdí své změny do repository. 2. Vy jakožto druhý uživatel si stáhnete aktuální verzi z repository (potvrzení neaktuální verze SVN neumožní). 3. SVN sloučí do pracovní kopie změny, které udělal první uživatel. Pokud editace probíhala na jiných řádcích zdrojového souboru nebo pokud je editace shodná, výsledek automatického sloučení změn je totožný, jako kdyby oba uživatelé pracovali se stejným souborem. 4. Konflikt: V ojedinělých případech, kdy oba uživatelé zároveň editovali různým způsoben stejné řádky, SVN detekuje konflikt. a. SVN provede částečné sloučení, zahlásí konfliktní stav a označí jej zvláštní ikonou (viz. Obrázek 2). b. Konflikt vyřešte editací sporných řádek vyznačených v pracovní kopii. Buďto v libovolném editoru zrevidujte řádky mezi značkami "<<<<<<<" a ">>>>>>>", nebo použijte nástroj TortoiseSvn / Edit Conflicst. c. Konflikt označte za vyřešený pomocí volby TortoiseSvn / Resolved. 5. Zkontrolujte správnost současné verze a potvrďte ji do repository. Popsané automatické slučování změn je možné jen u textových souborů, u binárních je nutné situaci řešit ručně. SVN umožňuje i uzamknutí souborů pro výhradní editaci. SVN ve skutečnosti funguje na principu přenášení změn, tzn. že porovná předchozí vezi souboru (tu si ukládá v adresáři .SVN) a novou verzi. Zjistí např., že přibyl řádek ten a ten, jiný řádek byl změněn a že jste smazali ten a ten soubor. Takto přes zněmy interpretuje stažení nové verze, commit verze i slučování změn a větvení. Pokud se tato operace nepovede, hlásí konflikt.
Označení důležitých verzí 1. Pro projekt, jehož konkrétní verzi chcete označit pro zjednodušení budoucího přístupu, zvolte TortoiseSvn / Branch/Tag. 2. Zadejte adresu, která bude stejná jako adresa projektu. Místo označení aktuální verze "/trunk" ale zadejte předem vytvořený adresář "/tags/" a připište krátký název (viz Obrázek 3). V projektech oddělení vývoje budeme značit verze ve stylu "V_1.2", verze poskytnuté jednotlivým zákazníkům jako "Z_Firma" a importované verze projektů jako "I_ZCvska". 3. Význam verze stručně popište do pole message a ujistěte se že křížek "Switch working copy..." není zatržen. Potvrzením dialogu vznikne v repository snadno přístupná virtuální kopie požadované verze projektu umístěná ve složce tags.
Obrázek 3 - Vytvoření kopie v repository
Práce s větvemi V naší firmě platí zásada, že se v repository na adresách /Zak/Nazev/trunk /trunk nebo /Proj/Nazev/trunk mohou vyskytovat pouze verze, které se mohou objevit v K2ce zákazníka (výjimku tvoří nové projekty). Průběh prací, které zatím nesmí být v trunku, si můžete verzovat verzovat v kopii projektu a po dokončení práce přenést do trunku k zákazníkovi až ostrý výsledek. SVN k tomu poskytuje mechanizmus tzv.. vývojových větví (Branch). ( Větve jsou v podstatě kopií opií projektu v jiné složce, přičemž SVN podporuje přenos změn z jedné složky do druhé (tzv Merge) (viz Obrázek 4). 1. Větev vytvoříte příkazem TortoiseSvn / Branch/Tag. V dialogu zadejte adresu, která bude stejná jako adresa projektu, místo "/trunk" ale zadejte předem vytvořený adresář "/branches/" a připište název větve (např. /branches/Work). Abyste pracovali se založenou větví, tak zaškrtněte "Switch working worki copy...". 2. Změny,, které nyní budete provádět v projektu, budou potvrzovány do větve, jako by se jednalo o samostatný projekt. 3. Nyní chceme zapracovat acovat své změny do ostré větve. Ostrou větev buďto máme někde staženou do jiné pracovní kopie nebo si přepneme svoji pracovní kopii. Přepnutí provedete spuštěním TortoiseSvn / Switch a zadáním větve (v našem případě /Zak/Firma/trunk). /Zak/Firma/trunk) 4. Pro přenos do pracovní kopie spusťte TortoiseSvn / Merge, v průvodci zvolte "Reintegrate a branch", zadejte adresu zdrojové větve (v našem případě /Zak/Firma/branches/Work) a potvrďte dialogy. 5. SVN sloučí změny do pracovní kopie (při opakovaném spuštění se přenesou vždy pouze nové změny).. Zkontrolujte správnost verze, vyřešte případné konflikty a novou verzi potvrďte do repository. • Alternativa: Můžete přenést pouze některé změny z větve (např. pouze Vaše úpravy z testovací větve Linetu do ostré firmy). firmy V tom případě po příkazu TortoiseSvn / Merge zvolte "Merge range of revisions", ions", zadejte adresu zdrojové větve (/Zak/Linet/branches/TestLinet). Rozklikněte ěte Show log a označte označte pouze Vámi provedené změny. Po potvrzení dialogů se přenesou do pracovní kopie pouze tyto změny.
•
Alternativa: Soubor lze vyvětvit i do stejné složky, např. Skript.pas na Skript_Novy.pas, na němž pak budete pracovat, po otestování zákazníkem změny přenesete zpět do Skript.pas a Skript_Novy.pas odstraníte. Při zpracování přes SVN budete mít uchovanou celou historii procesu.
Obrázek 4 - Graf práce s větví projektu
Často kladené dotazy Mohu si lokálně zobrazit SVN detaily souborů? Ano, v Průzkumníku Windows lze u složek spravovaných přes SVN zobrazit SVN detaily souborů (viz Obrázek 5). Pokud je budete chtít opakovaně zobrazovat, tak proveďte následující nastavení: Průzkumník Windows / menu / Nástroje / Možnosti složky / záložka Zobrazení, vypnout zhruba 4. křížek "Pamatovat nastavení každé složky" a též kliknout na tlačítko "Obnovit všechny složky". Pak si již v Průzkumníku nad adresářem spravovaným SVN můžete druhým tlačítkem myši na záhlaví sloupců přidat příslušné detaily, které začínají slovem SVN. Situace je řešitelná i Total Commanderu, ale nastavení je složitější (viz http://tortoisesvn.net/node/32 ).
Obrázek 5 - Detaily souborů spravovaných přes SVN
Mohu používat jiný program pro porovnávání souborů? Pro porovnávání souborů, zvýraznění změn a především pro slučování i řešení konfliktů lze používat libovolný program, který je spustitelný z příkazové řádky (WinMerge, po troše nastavování třeba i MS Word). Osobně doporučuji Perforce Merge, umí i 3-way merge (nedocenitelné při řešení konfliktů) a má velmi řešení příjemný design i ovládání. Stačí nainstalovat tento externí nástroj z V:\Tools\SubVersion\ (z instalačního balíku pouze modul Visual Merge Tool) a v TortoIseSvn / Settings / Diff Tool a / Merge tool nastavit cestu k nainstalovanému p4merge.exe.
Obrázek 6 – Řešení konfliktu pomocí Perforce Merge (porovnávání má rozhraní jednodušší)
Lze do souboru automaticky zapisovat, o jakou revizi se jedná? Ano, do souborů spravovaných přes SubVersion lze pomocí automatické náhrady klíčových slov zapisovat číslo jejich revize, autora či umístěnív repository. Aby se to dělo ve Vámi přidaných souborech, tak je třeba nastavit vlastnost (property) každého souboru svn:keywords= Rev URL ". V hlavičce skriptů pak používám tato klíčová slova (údaje nezadávám - nahradí se): @Repository: $URL: https://svn.syst.cz/svn/K2/Proj/IO_Rozhrani/trunk/K2R/ISTree.pas$ @Verze: $Rev: 24$ Standardně do hlaviček našich skriptů ale klíčová slova pro náhradu nedáváme, protože všechny skripty spravované naší firmou mají být napojeny na SubVersion a protože od K2v130 může být nutné podepisovat aktuální verze souborů, které by se cyklicky měnili jednak podpisem a jednak záměnou klíčového slova revize. Další informace o náhradě klíčových slov získáte v nápovědě TortoiseSvn pod hesly "Project Settings" a "SubWCRev program". Mohu nechat TortoiseSvn zapamatovat své heslo? Na svém počítači na firmě je zapamatování Vašeho jména a hesla úplně v pořádku. Při práci na stroji zákazníka však zapamatování nedávejte. Pokud by se tak omylem stalo, zapamatování odstraňte v TortoiseSvn / Settings / záložka "Saved data" pomocí tlačítka Clear za "Authentication data". Proč se mi nezobrazují ikony stavu u souborů? Pro zobrazení SVN stavu na síťových discích je třeba provést následující nastavení: Zaškrtněte volbu TortoiseSvn / Settings / Icon Overlay / Drive Types / Network drives. Pro zobrazení ikon SVN stavů v Total Commanderu stačí v menu Configuration / Options na záložce Icons zapnout volbu "Show overlay icons". Jak a které soubory z K2ky dávat do repository? Do repository dáváme soubory K2ky zákazníka, které jsou určující pro funkci systému, tedy: • • • • • •
.\SestavyW\Special\ – soubory a podadresáře .\SestavyW\ – vybrané soubory, ale typicky RF_K2.pas .\K2_3main.ini .\Conf\ – definice speciálních poznámkových formulářů (.zbp) .\Mandant\ – vybrané soubory, ale typicky RF_Firm.pas, ExtFields.xml, TabMod.xml .\Mandant\Form_X\ – soubory a podadresáře (bez jazykových mutací stačí Form_0)
Tyto soubory najdete jako šablonu též v repository jako /Zak/_Sablona. Data běžícího zákazníka můžete do repository dostat následovně: 1. přes Repository broswer zkopírovat /Zak/_Sablona na /Zak/NovyZakaznik 2. přejmenovat přes Repository Broswer adresář mandanta /Zak/_Sablona/trunk/Mandant.VLOZ na NovyZakaznik 3. stáhnout trunk do K2ky (lze bez obav do běžící ostré K2ky – šablona neobsahuje soubory nenulové délky a tutíž už z principu nic nemodifikuje) 4. Postupně přidat nové požadované soubory či celé adresáře a odstraniť pomocné *.VLOZ 5. Po potvrzení je hotovo
Aby se v K2ce zákazníka nemotali ikony SVNka, tak doporučuji vypnout křížek TortoriseSVN / Settings / Icon overlay / Show overlay for unversioned items. Jak si mohu SVN rozbít? Pokud byste ve své lokální kopii provedly nežádoucí změny a neuváženě potvrdili tyto změny, tak v repository vznikne odpovídající nežádoucí verze (třeba i se smazanými adresáři). Původní verze tam ale zůstává a lze se k ní vrátit. Lokální pracovní kopii můžete rozbít manipulací se skrytým adresářem .SVN, který obsahuje veškeré údaje o napojení na repository a předchozí verzi. Nicméně, tím nepřijdete o své soubory, stačí si znovu jinam stáhnout verzi ze serveru a zanést Vaše změny. Pro zrušení vazby na SubVersion stačí odstranit všechny .SVN podadresáře projektu. Kde mohu získat další informace o SubVersion? • V nápovědě vyvolané přes TortoiseSvn / Help. • Na internetu (Google, http://subversion.tigris.org/ , http://tortoisesvn.tigris.org/ , http://svnbook.red-bean.com/ ) • Od svých kolegů nebo ve složitějších případech od Ondry Horáčka jakožto našeho garanta pro SubVersion.
Rejstřík Add, 2 Blame, 3 Branch, 5 Branch/Tag, 4, 5 Diff, 3 Edit Conflicts, 4 Export, 2 Help, 8 Checkout, 2 Ignore list, 3 Import, 3 Konflikt, 4 Merge, 5 Náhrada klíčových slov, 7 Princip, 4 Property, 7
Remove, 2 Repository, 1 Resolved, 4 Settings, 3, 7, 8 Show log, 3 síťový disk, 8 sloučení změn, 4 SubVersion, 1 SVN. viz SubVersion SVN detaily souborů, 7 svn:keywords, 7 Switch, 5 TortoiseSVN, 1 Total Commander, 1, 7, 8 Update, 2